Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTomeu Vizoso <tomeu@sugarlabs.org>2009-06-29 16:29:00 (GMT)
committer Tomeu Vizoso <tomeu@sugarlabs.org>2009-06-29 16:29:00 (GMT)
commit593c47681fba0b0d5ecc560cc4279c6387fb95e8 (patch)
tree4793776aac420f945b768b6ade057337c54dd42b /src
parent172bc2943b53ae3562d013576690720b97c11f3d (diff)
Implement sorting
Diffstat (limited to 'src')
-rw-r--r--src/jarabe/desktop/favoritesview.py2
-rw-r--r--src/jarabe/journal/listview.py62
2 files changed, 57 insertions, 7 deletions
diff --git a/src/jarabe/desktop/favoritesview.py b/src/jarabe/desktop/favoritesview.py
index 411b579..75aad39 100644
--- a/src/jarabe/desktop/favoritesview.py
+++ b/src/jarabe/desktop/favoritesview.py
@@ -377,7 +377,7 @@ class DatastoreListener(object):
def get_last_activity_async(self, bundle_id, properties, callback_cb):
query = {'activity': bundle_id,
'limit': 5,
- 'order_by': ['-mtime']}
+ 'order_by': ['-timestamp']}
reply_handler = lambda entries, total_count: self.__reply_handler_cb(
entries, total_count, callback_cb)
diff --git a/src/jarabe/journal/listview.py b/src/jarabe/journal/listview.py
index 0d4547e..9766c87 100644
--- a/src/jarabe/journal/listview.py
+++ b/src/jarabe/journal/listview.py
@@ -93,6 +93,7 @@ class BaseListView(gtk.Bin):
self.cell_title = None
self.cell_icon = None
+ self._title_column = None
self._add_columns()
self.tree_view.enable_model_drag_source(gtk.gdk.BUTTON1_MASK,
@@ -145,12 +146,15 @@ class BaseListView(gtk.Bin):
self.cell_title.props.ellipsize = pango.ELLIPSIZE_MIDDLE
self.cell_title.props.ellipsize_set = True
- column = gtk.TreeViewColumn(_('Title'))
- column.props.sizing = gtk.TREE_VIEW_COLUMN_FIXED
- column.props.expand = True
- column.pack_start(self.cell_title)
- column.add_attribute(self.cell_title, 'markup', ListModel.COLUMN_TITLE)
- self.tree_view.append_column(column)
+ self._title_column = gtk.TreeViewColumn(_('Title'))
+ self._title_column.props.sizing = gtk.TREE_VIEW_COLUMN_FIXED
+ self._title_column.props.expand = True
+ self._title_column.props.clickable = True
+ self._title_column.pack_start(self.cell_title)
+ self._title_column.add_attribute(self.cell_title, 'markup',
+ ListModel.COLUMN_TITLE)
+ self._title_column.connect('clicked', self.__header_clicked_cb)
+ self.tree_view.append_column(self._title_column)
buddies_column = gtk.TreeViewColumn('')
buddies_column.props.sizing = gtk.TREE_VIEW_COLUMN_FIXED
@@ -178,10 +182,52 @@ class BaseListView(gtk.Bin):
self.date_column.props.fixed_width = date_width
self.date_column.set_alignment(1)
self.date_column.props.resizable = True
+ self.date_column.props.clickable = True
+ self.date_column.props.sort_indicator = True
+ self.date_column.props.sort_order = gtk.SORT_ASCENDING
self.date_column.pack_start(cell_text)
self.date_column.add_attribute(cell_text, 'text', ListModel.COLUMN_DATE)
+ self.date_column.connect('clicked', self.__header_clicked_cb)
self.tree_view.append_column(self.date_column)
+ def __header_clicked_cb(self, column_clicked):
+ if column_clicked == self._title_column:
+ if self._title_column.props.sort_indicator:
+ if self._title_column.props.sort_order == gtk.SORT_DESCENDING:
+ self._query['order_by'] = ['+title']
+ else:
+ self._query['order_by'] = ['-title']
+ else:
+ self._query['order_by'] = ['+title']
+ elif column_clicked == self.date_column:
+ if self.date_column.props.sort_indicator:
+ if self.date_column.props.sort_order == gtk.SORT_DESCENDING:
+ self._query['order_by'] = ['+timestamp']
+ else:
+ self._query['order_by'] = ['-timestamp']
+ else:
+ self._query['order_by'] = ['+timestamp']
+
+ self.refresh()
+
+ # Need to update the column indicators after the model has been reset
+ if self._query['order_by'] == ['-timestamp']:
+ self.date_column.props.sort_indicator = True
+ self._title_column.props.sort_indicator = False
+ self.date_column.props.sort_order = gtk.SORT_DESCENDING
+ elif self._query['order_by'] == ['+timestamp']:
+ self.date_column.props.sort_indicator = True
+ self._title_column.props.sort_indicator = False
+ self.date_column.props.sort_order = gtk.SORT_ASCENDING
+ elif self._query['order_by'] == ['-title']:
+ self.date_column.props.sort_indicator = False
+ self._title_column.props.sort_indicator = True
+ self._title_column.props.sort_order = gtk.SORT_DESCENDING
+ elif self._query['order_by'] == ['+title']:
+ self.date_column.props.sort_indicator = False
+ self._title_column.props.sort_indicator = True
+ self._title_column.props.sort_order = gtk.SORT_ASCENDING
+
def _get_width_for_string(self, text):
# Add some extra margin
text = text + 'aaaaa'
@@ -231,6 +277,10 @@ class BaseListView(gtk.Bin):
def update_with_query(self, query_dict):
logging.debug('ListView.update_with_query')
self._query = query_dict
+
+ if 'order_by' not in self._query:
+ self._query['order_by'] = ['+timestamp']
+
self.refresh()
def refresh(self):