Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/src/jarabe/journal/listview.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/jarabe/journal/listview.py')
-rw-r--r--src/jarabe/journal/listview.py53
1 files changed, 53 insertions, 0 deletions
diff --git a/src/jarabe/journal/listview.py b/src/jarabe/journal/listview.py
index 57836f2..ce71f54 100644
--- a/src/jarabe/journal/listview.py
+++ b/src/jarabe/journal/listview.py
@@ -64,6 +64,10 @@ class BaseListView(gtk.Bin):
__gsignals__ = {
'clear-clicked': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([])),
+ 'clear-clicked': (gobject.SIGNAL_RUN_FIRST,
+ gobject.TYPE_NONE, ([])),
+ 'select-toggled': (gobject.SIGNAL_RUN_FIRST,
+ gobject.TYPE_NONE, ([bool]))
}
def __init__(self):
@@ -115,6 +119,12 @@ class BaseListView(gtk.Bin):
model.updated.connect(self.__model_updated_cb)
model.deleted.connect(self.__model_deleted_cb)
+ # Multi-selection stuff
+ self._selection_cache = set()
+
+ def get_mountpoint(self):
+ return self._query.get('mountpoints', [''])[0]
+
def __model_created_cb(self, sender, signal, object_id):
if self._is_new_item_visible(object_id):
self._set_dirty()
@@ -134,10 +144,31 @@ class BaseListView(gtk.Bin):
else:
return object_id.startswith(self._query['mountpoints'][0])
+ def __selected_cb(self, cell, path):
+ self._model.toggle_selection(path)
+
+ def get_model(self):
+ return self._model
+
def _add_columns(self):
+
+ cell_select = gtk.CellRendererToggle()
+ cell_select.props.indicator_size = style.zoom(26)
+ cell_select.props.activatable = True
+ cell_select.connect('toggled', self.__selected_cb)
+
+ column = gtk.TreeViewColumn()
+ column.props.sizing = gtk.TREE_VIEW_COLUMN_FIXED
+ column.props.fixed_width = style.GRID_CELL_SIZE
+ column.pack_start(cell_select)
+ column.add_attribute(cell_select, "active", ListModel.COLUMN_SELECT)
+ self.tree_view.append_column(column)
+
+
cell_favorite = CellRendererFavorite(self.tree_view)
cell_favorite.connect('clicked', self.__favorite_clicked_cb)
+
column = gtk.TreeViewColumn()
column.props.sizing = gtk.TREE_VIEW_COLUMN_FIXED
column.props.fixed_width = cell_favorite.props.width
@@ -283,14 +314,34 @@ class BaseListView(gtk.Bin):
if self._model is not None:
self._model.stop()
+ self._manage_selection_cache()
self._dirty = False
self._model = ListModel(self._query)
+ self._model.connect('select', self.__model_select_cb)
self._model.connect('ready', self.__model_ready_cb)
self._model.connect('progress', self.__model_progress_cb)
self._model.setup()
+ def _manage_selection_cache(self):
+ # Discard from cache elements that might not be selected anymore
+ self._selection_cache = \
+ self._selection_cache.difference(self._model._query_set_cache)
+ # Add to cache elements that are selected
+ self._selection_cache = \
+ self._selection_cache.union(self._model.get_selection())
+
+ def __model_select_cb(self, tree_model, status, refresh_view):
+ if refresh_view:
+ self._refresh_view(tree_model)
+ self.emit('select-toggled', status)
+
+
def __model_ready_cb(self, tree_model):
+ self._model.add_selection(self._selection_cache)
+ self._refresh_view(tree_model)
+
+ def _refresh_view(self, tree_model):
self._stop_progress_bar()
self._scroll_position = self.tree_view.props.vadjustment.props.value
@@ -413,6 +464,8 @@ class BaseListView(gtk.Bin):
self.add(self._scrolled_window)
self._scrolled_window.show()
+
+
def update_dates(self):
if not self.tree_view.flags() & gtk.REALIZED:
return