summaryrefslogtreecommitdiff
path: root/alot
diff options
context:
space:
mode:
authorpazz <patricktotzke@gmail.com>2011-06-01 18:33:50 +0100
committerpazz <patricktotzke@gmail.com>2011-06-01 18:33:50 +0100
commit7efd5f34f344c519bc46309dc55eb85491a1ce00 (patch)
treeba0c4c35359462bc0ed6fbbbb0940ed633384043 /alot
parent21274060a591fc4bf94b42a46359622219f787c5 (diff)
lazy messages, rebuild of singlethread msg lines
Diffstat (limited to 'alot')
-rw-r--r--alot/buffer.py9
-rw-r--r--alot/widgets.py43
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):