summaryrefslogtreecommitdiff
path: root/alot/buffers
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2021-01-26 18:18:21 +0100
committerAnton Khirnov <anton@khirnov.net>2021-01-26 18:18:21 +0100
commit8c7d464d1e31e5994623d0e3d4ad4f8216b6696e (patch)
tree760461872ab2a897a4fe97c13418adf0cbdfa99c /alot/buffers
parentfe1450cba0cc808dd843f327c4383930a78effca (diff)
widgets/global: move HeadersList to the only place where it is used
Diffstat (limited to 'alot/buffers')
-rw-r--r--alot/buffers/envelope.py45
1 files changed, 43 insertions, 2 deletions
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