Add __slots__ in most of the poezio.windows classes, to be more explicit about their data.

This commit is contained in:
Emmanuel Gil Peyrot 2018-10-24 16:28:55 +02:00
parent d967c246c8
commit cce1a4090a
14 changed files with 88 additions and 2 deletions

View file

@ -37,6 +37,8 @@ class DummyWin:
class Win:
__slots__ = ('_win', 'height', 'width', 'y', 'x')
def __init__(self) -> None:
self._win = None
self.height, self.width = 0, 0

View file

@ -152,6 +152,9 @@ class BookmarkAutojoinWin(FieldInputMixin):
class BookmarksWin(Win):
__slots__ = ('scroll_pos', '_current_input', 'current_horizontal_input',
'_bookmarks', 'lines')
def __init__(self, bookmarks: BookmarkList, height: int, width: int, y: int, x: int) -> None:
self._win = base_wins.TAB_WIN.derwin(height, width, y, x)
self.scroll_pos = 0

View file

@ -4,6 +4,8 @@ from poezio.theming import get_theme, to_curses_attr
class Dialog(Win):
__slots__ = ('text', 'accept', 'critical')
str_accept = " Accept "
str_refuse = " Reject "

View file

@ -20,6 +20,9 @@ class FieldInput:
'windows' library.
"""
# XXX: This conflicts with Win in the FieldInputMixin.
#__slots__ = ('_field', 'color')
def __init__(self, field):
self._field = field
self.color = get_theme().COLOR_NORMAL_TEXT
@ -47,6 +50,8 @@ class FieldInput:
class FieldInputMixin(FieldInput, Win):
"Mix both FieldInput and Win"
__slots__ = ()
def __init__(self, field):
FieldInput.__init__(self, field)
Win.__init__(self)
@ -60,6 +65,8 @@ class FieldInputMixin(FieldInput, Win):
class ColoredLabel(Win):
__slots__ = ('text', 'color')
def __init__(self, text):
self.text = text
self.color = get_theme().COLOR_NORMAL_TEXT
@ -85,6 +92,8 @@ class DummyInput(FieldInputMixin):
Used for fields that do not require any input ('fixed')
"""
__slots__ = ()
def __init__(self, field):
FieldInputMixin.__init__(self, field)
@ -99,6 +108,8 @@ class DummyInput(FieldInputMixin):
class BooleanWin(FieldInputMixin):
__slots__ = ('last_key', 'value')
def __init__(self, field):
FieldInputMixin.__init__(self, field)
self.last_key = 'KEY_RIGHT'
@ -133,6 +144,8 @@ class BooleanWin(FieldInputMixin):
class TextMultiWin(FieldInputMixin):
__slots__ = ('options', 'val_pos', 'edition_input')
def __init__(self, field):
FieldInputMixin.__init__(self, field)
options = field.get_value()
@ -212,6 +225,8 @@ class TextMultiWin(FieldInputMixin):
class ListMultiWin(FieldInputMixin):
__slots__ = ('options', 'val_pos')
def __init__(self, field):
FieldInputMixin.__init__(self, field)
values = field.get_value() or []
@ -261,6 +276,8 @@ class ListMultiWin(FieldInputMixin):
class ListSingleWin(FieldInputMixin):
__slots__ = ('options', 'val_pos')
def __init__(self, field):
FieldInputMixin.__init__(self, field)
# the option list never changes
@ -306,6 +323,8 @@ class ListSingleWin(FieldInputMixin):
class TextSingleWin(FieldInputMixin, Input):
__slots__ = ('text', 'pos')
def __init__(self, field):
FieldInputMixin.__init__(self, field)
Input.__init__(self)
@ -323,6 +342,8 @@ class TextSingleWin(FieldInputMixin, Input):
class TextPrivateWin(TextSingleWin):
__slots__ = ()
def __init__(self, field):
TextSingleWin.__init__(self, field)
@ -352,6 +373,8 @@ class FormWin:
On resize, move and resize all the subwin and define how the text will be written
On refresh, write all the text, and refresh all the subwins
"""
__slots__ = ('_form', '_win', 'scroll_pos', 'current_input', 'inputs')
input_classes = {
'boolean': BooleanWin,
'fixed': DummyInput,

View file

@ -24,6 +24,8 @@ class ImageWin(Win):
A window which contains either an image or a border.
"""
__slots__ = ('_image', '_display_avatar')
def __init__(self) -> None:
self._image = None # type: Optional[Image]
Win.__init__(self)

View file

@ -16,6 +16,8 @@ from poezio.theming import get_theme, to_curses_attr
class GlobalInfoBar(Win):
__slots__ = ('core')
def __init__(self, core) -> None:
Win.__init__(self)
self.core = core
@ -63,6 +65,8 @@ class GlobalInfoBar(Win):
class VerticalGlobalInfoBar(Win):
__slots__ = ('core')
def __init__(self, core, scr) -> None:
Win.__init__(self)
self.core = core

View file

@ -20,6 +20,8 @@ class InfoWin(Win):
MucInfoWin, etc. Provides some useful methods.
"""
__slots__ = ()
def __init__(self):
Win.__init__(self)
@ -40,6 +42,8 @@ class XMLInfoWin(InfoWin):
Info about the latest xml filter used and the state of the buffer.
"""
__slots__ = ()
def __init__(self):
InfoWin.__init__(self)
@ -63,6 +67,8 @@ class PrivateInfoWin(InfoWin):
about the MUC user we are talking to
"""
__slots__ = ()
def __init__(self):
InfoWin.__init__(self)
@ -104,6 +110,8 @@ class MucListInfoWin(InfoWin):
about the muc server being listed
"""
__slots__ = ('message')
def __init__(self, message=''):
InfoWin.__init__(self)
self.message = message
@ -129,6 +137,8 @@ class ConversationInfoWin(InfoWin):
about the user we are talking to
"""
__slots__ = ()
def __init__(self):
InfoWin.__init__(self)
@ -218,6 +228,8 @@ class ConversationInfoWin(InfoWin):
class DynamicConversationInfoWin(ConversationInfoWin):
__slots__ = ()
def write_contact_jid(self, jid):
"""
Just displays the resource in an other color
@ -240,6 +252,8 @@ class MucInfoWin(InfoWin):
about the MUC we are viewing
"""
__slots__ = ()
def __init__(self):
InfoWin.__init__(self)
@ -306,6 +320,8 @@ class ConversationStatusMessageWin(InfoWin):
The upper bar displaying the status message of the contact
"""
__slots__ = ()
def __init__(self):
InfoWin.__init__(self)
@ -331,6 +347,8 @@ class ConversationStatusMessageWin(InfoWin):
class BookmarksInfoWin(InfoWin):
__slots__ = ()
def __init__(self):
InfoWin.__init__(self)
@ -347,6 +365,8 @@ class BookmarksInfoWin(InfoWin):
class ConfirmStatusWin(Win):
__slots__ = ('text', 'critical')
def __init__(self, text, critical=False):
Win.__init__(self)
self.text = text

View file

@ -19,6 +19,8 @@ class HelpText(Win):
command mode.
"""
__slots__ = ('txt')
def __init__(self, text: str = '') -> None:
Win.__init__(self)
self.txt = text # type: str

View file

@ -32,6 +32,9 @@ class Input(Win):
passing the list of items that can be used to complete. The completion can be used
in a very flexible way.
"""
__slots__ = ('key_func', 'text', 'pos', 'view_pos', 'on_input', 'color',
'last_completion', 'hit_list')
text_attributes = 'bou1234567ti'
clipboard = '' # A common clipboard for all the inputs, this makes
@ -586,6 +589,8 @@ class HistoryInput(Input):
An input with colors and stuff, plus an history
^R allows to search inside the history (as in a shell)
"""
__slots__ = ('help_message', 'histo_pos', 'current_completed', 'search')
history = [] # type: List[str]
def __init__(self) -> None:

View file

@ -19,6 +19,9 @@ class ListWin(Win):
scrolled up and down, with one selected line at a time
"""
__slots__ = ('_columns', '_columns_sizes', 'sorted_by', 'lines',
'_selected_row', '_starting_pos')
def __init__(self, columns: Dict[str, int], with_headers: bool = True) -> None:
Win.__init__(self)
self._columns = columns # type: Dict[str, int]
@ -165,6 +168,9 @@ class ColumnHeaderWin(Win):
A class displaying the column's names
"""
__slots__ = ('_columns', '_columns_sizes', '_column_sel', '_column_order',
'_column_order_asc')
def __init__(self, columns: List[str]) -> None:
Win.__init__(self)
self._columns = columns

View file

@ -19,6 +19,8 @@ class VerticalSeparator(Win):
refreshed only on resize, but never on refresh, for efficiency
"""
__slots__ = ()
def rewrite_line(self) -> None:
self._win.vline(0, 0, curses.ACS_VLINE, self.height,
to_curses_attr(get_theme().COLOR_VERTICAL_SEPARATOR))
@ -30,6 +32,8 @@ class VerticalSeparator(Win):
class SimpleTextWin(Win):
__slots__ = ('_text', 'built_lines')
def __init__(self, text) -> None:
Win.__init__(self)
self._text = text

View file

@ -28,6 +28,8 @@ def userlist_to_cache(userlist: List[User]) -> List[CachedUser]:
class UserList(Win):
__slots__ = ('pos', 'cache')
def __init__(self) -> None:
Win.__init__(self)
self.pos = 0
@ -128,6 +130,8 @@ class UserList(Win):
class Topic(Win):
__slots__ = ('_message')
def __init__(self) -> None:
Win.__init__(self)
self._message = ''

View file

@ -20,6 +20,8 @@ Row = Union[RosterGroup, Contact]
class RosterWin(Win):
__slots__ = ('pos', 'start_pos', 'selected_row', 'roster_cache')
def __init__(self) -> None:
Win.__init__(self)
self.pos = 0 # cursor position in the contact list
@ -342,6 +344,8 @@ class RosterWin(Win):
class ContactInfoWin(Win):
__slots__ = ()
def draw_contact_info(self, contact: Contact) -> None:
"""
draw the contact information

View file

@ -32,6 +32,9 @@ class Line:
class BaseTextWin(Win):
__slots__ = ('lines_nb_limit', 'pos', 'built_lines', 'lock', 'lock_buffer',
'separator_after')
def __init__(self, lines_nb_limit: Optional[int] = None) -> None:
if lines_nb_limit is None:
lines_nb_limit = config.get('max_lines_in_memory')
@ -175,6 +178,8 @@ class BaseTextWin(Win):
class TextWin(BaseTextWin):
__slots__ = ('highlights', 'hl_pos', 'nb_of_highlights_after_separator')
def __init__(self, lines_nb_limit: Optional[int] = None) -> None:
BaseTextWin.__init__(self, lines_nb_limit)
@ -190,8 +195,6 @@ class TextWin(BaseTextWin):
# This is useful to make “go to next highlight“ work after a “move to separator”.
self.nb_of_highlights_after_separator = 0
self.separator_after = None
def next_highlight(self) -> None:
"""
Go to the next highlight in the buffer.
@ -563,6 +566,8 @@ class TextWin(BaseTextWin):
class XMLTextWin(BaseTextWin):
__slots__ = ()
def __init__(self) -> None:
BaseTextWin.__init__(self)