From e759d61266b6bc9d0bb9eabd9e6e9cb8260df35b Mon Sep 17 00:00:00 2001 From: Andrew Resch Date: Fri, 28 Nov 2008 21:31:50 +0000 Subject: [PATCH] Fix #602 re-did files/peers tab state saving/loading --- deluge/ui/gtkui/files_tab.py | 62 ++++++++++++++++++----------------- deluge/ui/gtkui/peers_tab.py | 63 +++++++++++++++++++----------------- 2 files changed, 67 insertions(+), 58 deletions(-) diff --git a/deluge/ui/gtkui/files_tab.py b/deluge/ui/gtkui/files_tab.py index 433cd05da..a556b1cb2 100644 --- a/deluge/ui/gtkui/files_tab.py +++ b/deluge/ui/gtkui/files_tab.py @@ -76,14 +76,6 @@ def cell_progress(column, cell, model, row, data): cell.set_property("text", text) cell.set_property("value", value) -class ColumnState: - def __init__(self, name, position, width, sort, sort_order): - self.name = name - self.position = position - self.width = width - self.sort = sort - self.sort_order = sort_order - class FilesTab(Tab): def __init__(self): Tab.__init__(self) @@ -203,10 +195,21 @@ class FilesTab(Tab): def save_state(self): filename = "files_tab.state" - state = [] + # Get the current sort order of the view + column_id, sort_order = self.treestore.get_sort_column_id() + + # Setup state dict + state = { + "columns": {}, + "sort_id": column_id, + "sort_order": sort_order + } + for index, column in enumerate(self.listview.get_columns()): - state.append(ColumnState(column.get_title(), index, column.get_width(), - column.get_sort_indicator(), int(column.get_sort_order()))) + state["columns"][column.get_title()] = { + "position": index, + "width": column.get_width() + } # Get the config location for saving the state file config_location = ConfigManager("gtkui.conf")["config_location"] @@ -230,28 +233,30 @@ class FilesTab(Tab): state_file = open(os.path.join(config_location, filename), "rb") state = cPickle.load(state_file) state_file.close() - except (EOFError, IOError), e: + except (EOFError, IOError, AttributeError), e: log.warning("Unable to load state file: %s", e) if state == None: return - for column_state in state: - # Find matching columns in the listview - for (index, column) in enumerate(self.listview.get_columns()): - if column_state.name == column.get_title(): - # We have a match, so set options that were saved in state - if column_state.width > 0: - column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED) - column.set_fixed_width(column_state.width) - column.set_sort_indicator(column_state.sort) - column.set_sort_order(column_state.sort_order) - if column_state.position != index: - # Column is in wrong position - if column_state.position == 0: - self.listview.move_column_after(column, None) - else: - self.listview.move_column_after(column, self.listview.get_columns()[column_state.position - 1]) + if state["sort_id"] and state["sort_order"]: + self.treestore.set_sort_column_id(state["sort_id"], state["sort_order"]) + + for (index, column) in enumerate(self.listview.get_columns()): + cname = column.get_title() + if state["columns"].has_key(cname): + cstate = state["columns"][cname] + column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED) + column.set_fixed_width(cstate["width"]) + if state["sort_id"] == index: + column.set_sort_indicator(True) + column.set_sort_order(state["sort_order"]) + if cstate["position"] != index: + # Column is in wrong position + if cstate["position"] == 0: + self.listview.move_column_after(column, None) + elif self.listview.get_columns()[cstate["position"] - 1].get_title() != cname: + self.listview.move_column_after(column, self.listview.get_columns()[cstate["position"] - 1]) def update(self): # Get the first selected torrent @@ -661,4 +666,3 @@ class FilesTab(Tab): model.foreach(find_file, None) log.debug("to_rename: %s", to_rename) client.rename_files(self.torrent_id, to_rename) - diff --git a/deluge/ui/gtkui/peers_tab.py b/deluge/ui/gtkui/peers_tab.py index 3d36fc665..8a4dbb90f 100644 --- a/deluge/ui/gtkui/peers_tab.py +++ b/deluge/ui/gtkui/peers_tab.py @@ -44,14 +44,6 @@ def cell_data_progress(column, cell, model, row, data): cell.set_property("value", value * 100) cell.set_property("text", "%.2f%%" % (value * 100)) -class ColumnState: - def __init__(self, name, position, width, sort, sort_order): - self.name = name - self.position = position - self.width = width - self.sort = sort - self.sort_order = sort_order - class PeersTab(Tab): def __init__(self): Tab.__init__(self) @@ -166,10 +158,21 @@ class PeersTab(Tab): def save_state(self): filename = "peers_tab.state" - state = [] + # Get the current sort order of the view + column_id, sort_order = self.liststore.get_sort_column_id() + + # Setup state dict + state = { + "columns": {}, + "sort_id": column_id, + "sort_order": sort_order + } + for index, column in enumerate(self.listview.get_columns()): - state.append(ColumnState(column.get_title(), index, column.get_width(), - column.get_sort_indicator(), int(column.get_sort_order()))) + state["columns"][column.get_title()] = { + "position": index, + "width": column.get_width() + } # Get the config location for saving the state file config_location = ConfigManager("gtkui.conf")["config_location"] @@ -193,32 +196,34 @@ class PeersTab(Tab): state_file = open(os.path.join(config_location, filename), "rb") state = cPickle.load(state_file) state_file.close() - except (EOFError, IOError), e: + except (EOFError, IOError, AttributeError), e: log.warning("Unable to load state file: %s", e) if state == None: return - if len(state) != len(self.listview.get_columns()): + if len(state["columns"]) != len(self.listview.get_columns()): log.warning("peers_tab.state is not compatible! rejecting..") return - for column_state in state: - # Find matching columns in the listview - for (index, column) in enumerate(self.listview.get_columns()): - if column_state.name == column.get_title(): - # We have a match, so set options that were saved in state - if column_state.width > 0: - column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED) - column.set_fixed_width(column_state.width) - column.set_sort_indicator(column_state.sort) - column.set_sort_order(column_state.sort_order) - if column_state.position != index: - # Column is in wrong position - if column_state.position == 0: - self.listview.move_column_after(column, None) - else: - self.listview.move_column_after(column, self.listview.get_columns()[column_state.position - 1]) + if state["sort_id"] and state["sort_order"]: + self.treestore.set_sort_column_id(state["sort_id"], state["sort_order"]) + + for (index, column) in enumerate(self.listview.get_columns()): + cname = column.get_title() + if state["columns"].has_key(cname): + cstate = state["columns"][cname] + column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED) + column.set_fixed_width(cstate["width"]) + if state["sort_id"] == index: + column.set_sort_indicator(True) + column.set_sort_order(state["sort_order"]) + if cstate["position"] != index: + # Column is in wrong position + if cstate["position"] == 0: + self.listview.move_column_after(column, None) + elif self.listview.get_columns()[cstate["position"] - 1].get_title() != cname: + self.listview.move_column_after(column, self.listview.get_columns()[cstate["position"] - 1]) def update(self): # Get the first selected torrent