summaryrefslogtreecommitdiffstats
path: root/deluge/ui/gtkui/listview.py
diff options
context:
space:
mode:
Diffstat (limited to 'deluge/ui/gtkui/listview.py')
-rw-r--r--deluge/ui/gtkui/listview.py55
1 files changed, 30 insertions, 25 deletions
diff --git a/deluge/ui/gtkui/listview.py b/deluge/ui/gtkui/listview.py
index 204f09bdb..120dda3e7 100644
--- a/deluge/ui/gtkui/listview.py
+++ b/deluge/ui/gtkui/listview.py
@@ -237,17 +237,30 @@ class ListView:
model_filter = self.liststore.filter_new()
model_filter.set_visible_column(
self.columns["filter"].column_indices[0])
- sort_info = None
- if self.model_filter:
- sort_info = self.model_filter.get_sort_column_id()
-
self.model_filter = gtk.TreeModelSort(model_filter)
- if sort_info and sort_info[0] and sort_info[1] > -1:
- self.model_filter.set_sort_column_id(sort_info[0], sort_info[1])
- self.set_sort_functions()
self.model_filter.connect("sort-column-changed", self.on_model_sort_changed)
self.model_filter.connect("row-inserted", self.on_model_row_inserted)
self.treeview.set_model(self.model_filter)
+ self.set_sort_functions()
+ self.set_model_sort()
+
+ def set_model_sort(self):
+ column_state = self.get_sort_column_from_state()
+ if column_state:
+ self.treeview.get_model().set_sort_column_id(column_state.sort, column_state.sort_order)
+ # Using the default sort column
+ elif self.default_sort_column_id:
+ self.model_filter.set_sort_column_id(self.default_sort_column_id, gtk.SORT_ASCENDING)
+ self.model_filter.set_default_sort_func(None)
+
+ def get_sort_column_from_state(self):
+ """Find the first (should only be one) state with sort enabled"""
+ if self.state is None:
+ return None
+ for column_state in self.state:
+ if column_state.sort is not None and column_state.sort > -1:
+ return column_state
+ return None
def on_model_sort_changed(self, model):
if self.unique_column_id:
@@ -281,7 +294,6 @@ class ListView:
return cmp(model[iter1][data], model[iter2][data])
def set_sort_functions(self):
- self.model_filter.set_default_sort_func(None)
for column in self.columns.values():
sort_func = column.sort_func or self.generic_sort_func
self.model_filter.set_sort_func(
@@ -297,9 +309,10 @@ class ListView:
position = index
break
sort = None
- sort_id, order = self.model_filter.get_sort_column_id()
- if self.get_column_name(sort_id) == column.get_title():
- sort = sort_id
+ if self.model_filter:
+ sort_id, order = self.model_filter.get_sort_column_id()
+ if self.get_column_name(sort_id) == column.get_title():
+ sort = sort_id
return ListViewColumnState(column.get_title(), position,
column.get_width(), column.get_visible(),
@@ -449,10 +462,6 @@ class ListView:
self.liststore.foreach(copy_row, (new_list, self.columns))
self.liststore = new_list
- # Create the model
- self.create_model_filter()
-
- return
def remove_column(self, header):
"""Removes the column with the name 'header' from the listview"""
@@ -481,10 +490,11 @@ class ListView:
# Create a new liststore
self.create_new_liststore()
+ # Create new model for the treeview
+ self.create_model_filter()
# Re-create the menu
self.create_checklist_menu()
-
return
def add_column(self, header, render, col_types, hidden, position,
@@ -523,6 +533,10 @@ class ListView:
# Create a new list with the added column
self.create_new_liststore()
+ # Happens only on columns added after the torrent list has been loaded
+ if self.model_filter:
+ self.create_model_filter()
+
column = self.TreeviewColumn(header)
if column_type == "text":
@@ -575,11 +589,6 @@ class ListView:
if tooltip:
column.get_widget().set_tooltip_markup(tooltip)
- if default_sort:
- if self.model_filter.get_sort_column_id()[0] is None:
- self.model_filter.set_sort_column_id(column_indices[sortid],
- gtk.SORT_ASCENDING)
-
# Check for loaded state and apply
column_in_state = False
if self.state != None:
@@ -591,10 +600,6 @@ class ListView:
column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
column.set_fixed_width(column_state.width)
- if column_state.sort is not None and column_state.sort > -1:
- self.model_filter.set_sort_column_id(
- column_state.sort, column_state.sort_order
- )
column.set_visible(column_state.visible)
position = column_state.position
break