summaryrefslogtreecommitdiff
path: root/alot/buffer.py
diff options
context:
space:
mode:
authorpazz <patricktotzke@gmail.com>2011-05-23 21:47:44 +0100
committerpazz <patricktotzke@gmail.com>2011-05-23 21:47:44 +0100
commit30788c15e76e2d58840c0e4b89116572854586da (patch)
treeb8c486b22f89e9f15e6dc3c7652f39428a7c70ba /alot/buffer.py
parent25a42f2cf157632740e6940b544fca7d5bc98c5f (diff)
rename to "alot"
read and laugh, alot: http://hyperboleandahalf.blogspot.com/2010/04/alot-is-better-than-you-at-everything.html
Diffstat (limited to 'alot/buffer.py')
-rw-r--r--alot/buffer.py139
1 files changed, 139 insertions, 0 deletions
diff --git a/alot/buffer.py b/alot/buffer.py
new file mode 100644
index 00000000..ff37a69c
--- /dev/null
+++ b/alot/buffer.py
@@ -0,0 +1,139 @@
+import urwid
+
+import widgets
+import command
+from walker import IteratorWalker
+
+
+class Buffer(urwid.AttrMap):
+ def __init__(self, ui, widget, name):
+ self.ui = ui
+ self.typename = name
+ self.bindings = {}
+ urwid.AttrMap.__init__(self, widget, {})
+
+ def refresh(self):
+ pass
+
+ def __str__(self):
+ return "[%s]" % (self.typename)
+
+ def apply_command(self, cmd):
+ #call and store it directly for a local cmd history
+ self.ui.apply_command(cmd)
+ #self.refresh()
+
+ def keypress(self, size, key):
+ if key in self.bindings:
+ self.ui.logger.debug("%s: handeles key: %s" % (self.typename, key))
+ (cmdname, parms) = self.bindings[key]
+ cmd = command.factory(cmdname, **parms)
+ self.apply_command(cmd)
+ else:
+ if key == 'j': key = 'down'
+ elif key == 'k': key = 'up'
+ elif key == 'h': key = 'left'
+ elif key == 'l': key = 'right'
+ elif key == ' ': key = 'page down'
+ return self.original_widget.keypress(size, key)
+
+
+class BufferListBuffer(Buffer):
+ def __init__(self, ui, filtfun=None):
+ self.filtfun = filtfun
+ self.ui = ui
+ #better create a walker obj that has a pointer to ui.bufferlist
+ #self.widget=createWalker(...
+ self.refresh()
+ Buffer.__init__(self, ui, self.original_widget, 'bufferlist')
+ self.bindings = {
+ 'd': ('buffer_close',
+ {'buffer': self.get_selected_buffer}),
+ 'enter': ('buffer_focus',
+ {'buffer': self.get_selected_buffer}),
+ }
+
+ def index_of(self, b):
+ return self.ui.buffers.index(b)
+
+ def refresh(self):
+ lines = list()
+ for (num, b) in enumerate(filter(self.filtfun, self.ui.buffers)):
+ line = widgets.BufferlineWidget(b)
+ if (num % 2) == 0: attr = 'bufferlist_results_even'
+ else: attr = 'bufferlist_results_odd'
+ buf = urwid.AttrMap(line, attr, 'bufferlist_focus')
+ num = urwid.Text('%3d:' % self.index_of(b))
+ lines.append(urwid.Columns([('fixed', 4, num), buf]))
+ self.bufferlist = urwid.ListBox(urwid.SimpleListWalker(lines))
+ self.original_widget = self.bufferlist
+
+ def get_selected_buffer(self):
+ (linewidget, size) = self.bufferlist.get_focus()
+ bufferlinewidget = linewidget.get_focus().original_widget
+ return bufferlinewidget.get_buffer()
+
+
+class SearchBuffer(Buffer):
+ threads = []
+
+ def __init__(self, ui, initialquery=''):
+ self.dbman = ui.dbman
+ self.querystring = initialquery
+ self.result_count = 0
+ #self.widget=createWalker(...
+ self.refresh()
+ Buffer.__init__(self, ui, self.original_widget, 'search')
+ self.bindings = {
+ 'enter': ('open_thread', {'thread': self.get_selected_thread}),
+ }
+
+ def refresh(self):
+ self.result_count = self.dbman.count_messages(self.querystring)
+ threads = self.dbman.search_threads(self.querystring)
+ iterator = IteratorWalker(threads, widgets.ThreadlineWidget)
+ self.threadlist = urwid.ListBox(iterator)
+ self.original_widget = self.threadlist
+
+ def __str__(self):
+ string = "[%s] for %s, (%d)"
+ return string % (self.typename, self.querystring, self.result_count)
+
+ def get_selected_thread(self):
+ (threadlinewidget, size) = self.threadlist.get_focus()
+ return threadlinewidget.get_thread()
+
+
+class SingleThreadBuffer(Buffer):
+ def __init__(self, ui, thread):
+ self.read_thread(thread)
+ self.refresh()
+ Buffer.__init__(self, ui, self.original_widget, 'search')
+ self.bindings = {
+ 'enter': ('call_pager',
+ {'path': self.get_selected_message_file}),
+ }
+
+ def read_thread(self, thread):
+ self.message_count = thread.get_total_messages()
+ self.subject = thread.get_subject()
+ # list() throws an error
+ self.messages = [m for m in thread.get_toplevel_messages()]
+
+ def refresh(self):
+ msgs = list()
+ for (num, m) in enumerate(self.messages, 1):
+ msgs.append(widgets.MessageWidget(m, even=(num % 2 == 0)))
+ self.messagelist = urwid.ListBox(msgs)
+ self.original_widget = self.messagelist
+
+ def __str__(self):
+ string = "[%s] %s, (%d)"
+ return string % (self.typename, self.subject, self.message_count)
+
+ def get_selected_message(self):
+ (messagewidget, size) = self.messagelist.get_focus()
+ return messagewidget.get_message()
+
+ def get_selected_message_file(self):
+ return self.get_selected_message().get_filename()