summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCalum Lind <calumlind+deluge@gmail.com>2014-11-20 18:46:55 +0000
committerCalum Lind <calumlind+deluge@gmail.com>2014-11-20 18:48:30 +0000
commitdd6e7ec490ac7ae71f2dafe0b986bd7ccf50d3ee (patch)
tree8eabcc56cee60c985d6b0656d74f2d47a9d17004
parent2c1a863ffb7b8b3d4879d634308d06a2ad7222b7 (diff)
downloaddeluge-dd6e7ec490ac7ae71f2dafe0b986bd7ccf50d3ee.tar.gz
deluge-dd6e7ec490ac7ae71f2dafe0b986bd7ccf50d3ee.tar.bz2
deluge-dd6e7ec490ac7ae71f2dafe0b986bd7ccf50d3ee.zip
[#2698] [GTKUI] Fix corrupted column indexes when using multiple col_types
* Ensures that removing multiple items from liststore_columns list does not affect the index.
-rw-r--r--deluge/ui/gtkui/listview.py6
-rw-r--r--tests/test_torrentview.py19
2 files changed, 22 insertions, 3 deletions
diff --git a/deluge/ui/gtkui/listview.py b/deluge/ui/gtkui/listview.py
index e17b552f6..283c77fd0 100644
--- a/deluge/ui/gtkui/listview.py
+++ b/deluge/ui/gtkui/listview.py
@@ -488,8 +488,8 @@ class ListView:
# Delete the column
del self.columns[header]
self.column_index.remove(header)
- # Shift the column_indices values of those columns effected by the
- # removal. Any column_indices > the one removed.
+ # Shift the column_indices values of those columns affected by the
+ # removal. Any column_indices > the one removed.
for column in self.columns.values():
if column.column_indices[0] > column_indices[0]:
# We need to shift this column_indices
@@ -499,7 +499,7 @@ class ListView:
self.update_treeview_column(column.name, add=False)
# Remove from the liststore columns list
- for index in column_indices:
+ for index in sorted(column_indices, reverse=True):
del self.liststore_columns[index]
# Create a new liststore
self.create_new_liststore()
diff --git a/tests/test_torrentview.py b/tests/test_torrentview.py
index dd974bc10..12a7e9813 100644
--- a/tests/test_torrentview.py
+++ b/tests/test_torrentview.py
@@ -30,6 +30,8 @@ class TorrentviewTestCase(unittest.TestCase):
self.assertEquals(self.torrentview.liststore_columns, default_liststore_columns)
self.assertEquals(self.torrentview.columns["Save Path"].column_indices, [26])
+
+ # Add a text column
test_col = "Test column"
self.torrentview.add_text_column(test_col, status_field=["label"])
self.assertEquals(len(self.torrentview.liststore_columns), 28)
@@ -37,6 +39,7 @@ class TorrentviewTestCase(unittest.TestCase):
self.assertEquals(self.torrentview.column_index[-1], test_col)
self.assertEquals(self.torrentview.columns[test_col].column_indices, [27])
+ # Add a second text column
test_col2 = "Test column2"
self.torrentview.add_text_column(test_col2, status_field=["label2"])
self.assertEquals(len(self.torrentview.liststore_columns), 29)
@@ -44,8 +47,24 @@ class TorrentviewTestCase(unittest.TestCase):
self.assertEquals(self.torrentview.column_index[-1], test_col2)
self.assertEquals(self.torrentview.columns[test_col2].column_indices, [28])
+ # Remove column
self.torrentview.remove_column(test_col)
self.assertEquals(len(self.torrentview.liststore_columns), 28)
self.assertEquals(len(self.torrentview.column_index), 23)
self.assertEquals(self.torrentview.column_index[-1], test_col2)
self.assertEquals(self.torrentview.columns[test_col2].column_indices, [27])
+
+ # Add a column with multiple column types
+ test_col3 = "Test column3"
+ self.torrentview.add_progress_column(test_col3, status_field=["progress", "label3"], col_types=[float, str])
+ self.assertEquals(len(self.torrentview.liststore_columns), 30)
+ self.assertEquals(len(self.torrentview.column_index), 24)
+ self.assertEquals(self.torrentview.column_index[-1], test_col3)
+ self.assertEquals(self.torrentview.columns[test_col3].column_indices, [28, 29])
+
+ # Remove multiple column-types column
+ self.torrentview.remove_column(test_col3)
+ self.assertEquals(len(self.torrentview.liststore_columns), 28)
+ self.assertEquals(len(self.torrentview.column_index), 23)
+ self.assertEquals(self.torrentview.column_index[-1], test_col2)
+ self.assertEquals(self.torrentview.columns[test_col2].column_indices, [27])