diff options
author | Tomeu Vizoso <tomeu@sugarlabs.org> | 2009-01-10 18:01:12 (GMT) |
---|---|---|
committer | Tomeu Vizoso <tomeu@sugarlabs.org> | 2009-01-10 18:01:12 (GMT) |
commit | 3ae6d51ebc0af3298fe058b7ed6acca60d168f22 (patch) | |
tree | f9f0aec5e4aa6ba20946bfe902ded1db9fe96148 /src/jarabe/journal/listview.py | |
parent | 5d15f1caf33f050bf8c3a0422f8a950b186a6215 (diff) |
Read removable devices asynchronously
Diffstat (limited to 'src/jarabe/journal/listview.py')
-rw-r--r-- | src/jarabe/journal/listview.py | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/src/jarabe/journal/listview.py b/src/jarabe/journal/listview.py index b0be70e..e609c8c 100644 --- a/src/jarabe/journal/listview.py +++ b/src/jarabe/journal/listview.py @@ -18,6 +18,7 @@ import logging import traceback import sys from gettext import gettext as _ +import time import hippo import gobject @@ -49,6 +50,8 @@ class BaseListView(gtk.HBox): self._page_size = 0 self._reflow_sid = 0 self._do_scroll_hid = None + self._progress_bar = None + self._last_progress_bar_pulse = None gtk.HBox.__init__(self) self.set_flags(gtk.HAS_FOCUS|gtk.CAN_FOCUS) @@ -185,7 +188,17 @@ class BaseListView(gtk.HBox): def refresh(self): logging.debug('ListView.refresh query %r' % self._query) + self._stop_progress_bar() + self._start_progress_bar() + self._result_set = model.find(self._query) + self._result_set.ready.connect(self.__result_set_ready_cb) + self._result_set.progress.connect(self.__result_set_progress_cb) + self._result_set.setup() + + def __result_set_ready_cb(self, **kwargs): + self._stop_progress_bar() + self._vadjustment.props.upper = self._result_set.length self._vadjustment.changed() @@ -205,6 +218,33 @@ class BaseListView(gtk.HBox): self._clear_message() self._do_scroll() + def __result_set_progress_cb(self, **kwargs): + if time.time() - self._last_progress_bar_pulse > 0.05: + if self._progress_bar is not None: + self._progress_bar.pulse() + self._last_progress_bar_pulse = time.time() + + def _start_progress_bar(self): + self.remove(self._canvas) + self.remove(self._vscrollbar) + + alignment = gtk.Alignment(xalign=0.5, yalign=0.5, xscale=0.5) + self.pack_start(alignment) + alignment.show() + + self._progress_bar = gtk.ProgressBar() + self._progress_bar.props.pulse_step = 0.01 + self._last_progress_bar_pulse = time.time() + alignment.add(self._progress_bar) + self._progress_bar.show() + + def _stop_progress_bar(self): + self.remove(self.get_children()[0]) + self._progress_bar = None + + self.pack_start(self._canvas) + self.pack_end(self._vscrollbar, expand=False, fill=False) + def _scroll_event_cb(self, hbox, event): if event.direction == gtk.gdk.SCROLL_UP: if self._vadjustment.props.value > self._vadjustment.props.lower: |