diff options
author | pazz <patricktotzke@gmail.com> | 2011-06-01 18:33:50 +0100 |
---|---|---|
committer | pazz <patricktotzke@gmail.com> | 2011-06-01 18:33:50 +0100 |
commit | 7efd5f34f344c519bc46309dc55eb85491a1ce00 (patch) | |
tree | ba0c4c35359462bc0ed6fbbbb0940ed633384043 /alot | |
parent | 21274060a591fc4bf94b42a46359622219f787c5 (diff) |
lazy messages, rebuild of singlethread msg lines
Diffstat (limited to 'alot')
-rw-r--r-- | alot/buffer.py | 9 | ||||
-rw-r--r-- | alot/widgets.py | 43 |
2 files changed, 36 insertions, 16 deletions
diff --git a/alot/buffer.py b/alot/buffer.py index 6b3fc011..3819d23d 100644 --- a/alot/buffer.py +++ b/alot/buffer.py @@ -189,18 +189,19 @@ class SingleThreadBuffer(Buffer): def rebuild(self): msgs = list() for (num, (depth, m)) in enumerate(self.messages, 1): - mwidget = widgets.MessageWidget(m, folded=True) + if 'unread' in m.get_tags(): + m.remove_tags(['unread']) + mwidget = widgets.MessageWidget(m, depth=depth, folded=True) if (num % 2 == 0): attr = 'messagesummary_even' else: attr = 'messagesummary_odd' - m.remove_tags(['unread']) # a spacer of width 0 breaks urwid.Columns if depth == 0: line = urwid.AttrMap(urwid.Columns([mwidget]), attr, 'messagesummary_focus') else: - spacer = urwid.Text(' ' * depth) - line = urwid.AttrMap(urwid.Columns([('fixed', depth, spacer), mwidget]), attr, 'messagesummary_focus') + spacer = urwid.Text((' ' * depth) + u'\u2514\u25b6') + line = urwid.AttrMap(urwid.Columns([('fixed', depth+3, spacer), mwidget]), attr, 'messagesummary_focus') msgs.append(line) self.body = urwid.ListBox(msgs) diff --git a/alot/widgets.py b/alot/widgets.py index 2a7eee69..5e5bace3 100644 --- a/alot/widgets.py +++ b/alot/widgets.py @@ -176,14 +176,15 @@ class PromptWidget(AttrMap): class MessageWidget(WidgetWrap): - def __init__(self, message, folded=True): + def __init__(self, message, depth=0, folded=True): self.message = message + self.depth = depth self.sumw = MessageSummaryWidget(self.message) - self.headerw = MessageHeaderWidget(self.message.get_email()) - self.bodyw = MessageBodyWidget(self.message.get_email()) + self.headerw = None + self.bodyw = None self.displayed_list = [self.sumw] if not folded: - self.displayed_list.append(self.bodyw) + self.displayed_list.append(self.get_body_widget()) self.body = Pile(self.displayed_list) WidgetWrap.__init__(self, self.body) @@ -191,18 +192,36 @@ class MessageWidget(WidgetWrap): self.body = Pile(self.displayed_list) self._w = self.body + def _get_spacer(self): + if self.depth: + return urwid.Text((' ' * self.depth) + u'\u2514\u25b6') + else: + return None + + def get_header_widget(self): + if not self.headerw: + self.headerw = MessageHeaderWidget(self.message.get_email()) + return self.headerw + + def get_body_widget(self): + if not self.bodyw: + self.bodyw = MessageBodyWidget(self.message.get_email()) + return self.bodyw + def toggle_header(self): - if self.headerw in self.displayed_list: - self.displayed_list.remove(self.headerw) + hw = self.get_header_widget() + if hw in self.displayed_list: + self.displayed_list.remove(hw) else: - self.displayed_list.insert(1, self.headerw) + self.displayed_list.insert(1, hw) self.rebuild() def toggle_body(self): - if self.bodyw in self.displayed_list: - self.displayed_list.remove(self.bodyw) + bw = self.get_body_widget() + if bw in self.displayed_list: + self.displayed_list.remove(bw) else: - self.displayed_list.append(self.bodyw) + self.displayed_list.append(bw) self.sumw.toggle_folded() self.rebuild() @@ -231,9 +250,9 @@ class MessageSummaryWidget(WidgetWrap): WidgetWrap.__init__(self, Text(str(self))) def __str__(self): - prefix = "-" + prefix = "- " if self.folded: - prefix = '+' + prefix = '+ ' return prefix + str(self.message) def toggle_folded(self): |