From 8c7d464d1e31e5994623d0e3d4ad4f8216b6696e Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Tue, 26 Jan 2021 18:18:21 +0100 Subject: widgets/global: move HeadersList to the only place where it is used --- alot/buffers/envelope.py | 45 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 2 deletions(-) (limited to 'alot/buffers/envelope.py') diff --git a/alot/buffers/envelope.py b/alot/buffers/envelope.py index 55745ed0..ae13d74f 100644 --- a/alot/buffers/envelope.py +++ b/alot/buffers/envelope.py @@ -6,7 +6,6 @@ import os from .buffer import Buffer from ..settings.const import settings -from ..widgets.globals import HeadersList from ..widgets.globals import AttachmentWidget from ..helper import shorten_author_string @@ -49,6 +48,48 @@ def string_sanitize(string, tab_width=8): return '\n'.join(lines) +class _HeadersList(urwid.WidgetWrap): + """ renders a pile of header values as key/value list """ + + def __init__(self, headerslist, key_attr, value_attr, gaps_attr=None): + """ + :param headerslist: list of key/value pairs to display + :type headerslist: list of (str, str) + :param key_attr: theming attribute to use for keys + :type key_attr: urwid.AttrSpec + :param value_attr: theming attribute to use for values + :type value_attr: urwid.AttrSpec + :param gaps_attr: theming attribute to wrap lines in + :type gaps_attr: urwid.AttrSpec + """ + self.headers = headerslist + self.key_attr = key_attr + self.value_attr = value_attr + pile = urwid.Pile(self._build_lines(headerslist)) + if gaps_attr is None: + gaps_attr = key_attr + pile = urwid.AttrMap(pile, gaps_attr) + urwid.WidgetWrap.__init__(self, pile) + + def __str__(self): + return str(self.headers) + + def _build_lines(self, lines): + max_key_len = 1 + headerlines = [] + # calc max length of key-string + for key, value in lines: + if len(key) > max_key_len: + max_key_len = len(key) + for key, value in lines: + # todo : even/odd + keyw = ('fixed', max_key_len + 1, + urwid.Text((self.key_attr, key))) + valuew = urwid.Text((self.value_attr, value)) + line = urwid.Columns([keyw, valuew]) + headerlines.append(line) + return headerlines + class EnvelopeBuffer(Buffer): """message composition mode""" @@ -115,7 +156,7 @@ class EnvelopeBuffer(Buffer): value_att = settings.get_theming_attribute('envelope', 'header_value') gaps_att = settings.get_theming_attribute('envelope', 'header') - self.header_wgt = HeadersList(lines, key_att, value_att, gaps_att) + self.header_wgt = _HeadersList(lines, key_att, value_att, gaps_att) displayed_widgets.append(self.header_wgt) # display attachments -- cgit v1.2.3