traceback.print_exc()
def restore(self):
- try:
- window_height = 600
- window_width = 600
- toolbar_visible = True
- statusbar_visible = True
- filterbar_visible = False
+ states_dict = dict([
+ ("columns", ()), ("widths", ()), ("sort_column", "num"),
+ ("sort_reverse", False), ("window_height", 600),
+ ("window_width", 600), ("toolbar_visible", True),
+ ("statusbar_visible", True), ("filterbar_visible", False)])
+
+ interest_list = [
+ "columns", "widths", "sort_column", "sort_reverse",
+ "window_height", "window_width", "toolbar_visible",
+ "statusbar_visible", "filterbar_visible"]
+
+ interest_type_list = (
+ (list, str), (list, int), (str, None), (bool, None), (int, None),
+ (int, None), (bool, None), (bool, None), (bool, None))
+
+ def key_value_generator():
+
+ def generate_pair():
+ states_path = misc.get_board_states_path(self.bbs_type)
+ try:
+ for line in file(states_path):
+ key_equal_value = line.rstrip()
+ try:
+ index = key_equal_value.index("=")
+ except ValueError:
+ pass
+ else:
+ key = key_equal_value[:index]
+ if key in interest_list:
+ value = key_equal_value[index+1:]
+ yield key, value
+ except IOError:
+ traceback.print_exc()
+
+ def to_int(value):
+ try:
+ return int(value)
+ except:
+ return 0
+
+ for key, value in generate_pair():
+ list_index = interest_list.index(key)
+ key_type, key_type_extra = interest_type_list[list_index]
+ if key_type == str:
+ yield key, value
+ elif key_type == int:
+ yield key, to_int(value)
+ elif key_type == bool:
+ value = value == "True"
+ yield key, value
+ elif key_type == list:
+ if key_type_extra == str:
+ yield key, value.split(",")
+ elif key_type_extra == int:
+ yield key, [i for i in itertools.imap(
+ to_int, value.split(","))]
+ else:
+ print key, "not supported",
+ key_type, key_type_extra, value
+ else:
+ print key, "not supported", key_type, value
+
+ def load_gconf():
+ key_base = config.gconf_app_key_base() + "/board_states"
+ gconf_client = gconf.client_get_default()
+ width = gconf_client.get_int(key_base + "/window_width")
+ height = gconf_client.get_int(key_base + "/window_height")
+ states_dict["toolbar_visible"] = gconf_client.get_bool(
+ key_base + "/toolbar")
+ states_dict["statusbar_visible"] = gconf_client.get_bool(
+ key_base + "/statusbar")
+ states_dict["filterbar_visible"] = gconf_client.get_bool(
+ key_base + "/filterbar")
+
+ if width != 0:
+ states_dict["window_width"] = width
+ if height != 0:
+ states_dict["window_height"] = height
+ try:
try:
- key_base = config.gconf_app_key_base() + "/board_states"
- gconf_client = gconf.client_get_default()
- width = gconf_client.get_int(key_base + "/window_width")
- height = gconf_client.get_int(key_base + "/window_height")
- toolbar_visible = gconf_client.get_bool(key_base + "/toolbar")
- statusbar_visible = gconf_client.get_bool(key_base + "/statusbar")
- filterbar_visible = gconf_client.get_bool(key_base + "/filterbar")
-
- if width != 0:
- window_width = width
- if height != 0:
- window_height = height
+ load_gconf()
except:
traceback.print_exc()
- states_path = misc.get_board_states_path(self.bbs_type)
- if os.path.exists(states_path):
- sort_column_name = "num"
- sort_reverse = False
- clns = self.treeview.get_columns()
- treeviewcolumn = dict([(cln.id, cln) for cln in clns])
- for line in file(states_path):
- if line.startswith("columns="):
- line = line[len("columns="):].rstrip("\n")
- base_column = None
- for name in line.split(","):
- if name in treeviewcolumn:
- column = treeviewcolumn[name]
- self.treeview.move_column_after(
- column, base_column)
- base_column = column
- elif line.startswith("widths="):
- line = line[len("widths="):].rstrip("\n")
- columns = self.treeview.get_columns()
- for i, width in enumerate(line.split(",")):
- try:
- width = int(width)
- except:
- pass
- else:
- if i < len(columns):
- columns[i].set_fixed_width(width)
- elif line.startswith("sort_column="):
- kolumn_name = line[len("sort_column="):].rstrip("\n")
- if kolumn_name in treeviewcolumn:
- sort_column_name = kolumn_name
- elif line.startswith("sort_reverse="):
- reverse = line[len("sort_reverse="):].rstrip("\n")
- sort_reverse = reverse == "True"
- elif line.startswith("window_height="):
- height = window_height
- try:
- height = int(
- line[len("window_height="):].rstrip("\n"))
- except:
- pass
- else:
- window_height = height
- elif line.startswith("window_width="):
- width = window_width
- try:
- width = int(
- line[len("window_width="):].rstrip("\n"))
- except:
- pass
- else:
- window_width = width
- elif line.startswith("toolbar_visible="):
- tbar = line[len("toolbar_visible="):].rstrip("\n")
- toolbar_visible = tbar == "True"
- elif line.startswith("statusbar_visible="):
- sbar = line[len("statusbar_visible="):].rstrip("\n")
- statusbar_visible = sbar == "True"
- elif line.startswith("filterbar_visible="):
- fbar = line[len("filterbar_visible="):].rstrip("\n")
- filterbar_visible = fbar == "True"
-
- self.treeview.get_model().sort(
- sort_column_name, True, sort_reverse)
-
- self.window.set_default_size(window_width, window_height)
-
- if not toolbar_visible:
+ for key, value in key_value_generator():
+ states_dict[key] = value
+
+ self.treeview.get_model().sort(
+ states_dict["sort_column"], True, states_dict["sort_reverse"])
+
+ # set column order before set column width
+ treeviewcolumn = dict(
+ [(cln.id, cln) for cln in self.treeview.get_columns()])
+ base_column = None
+ for column_name in states_dict["columns"]:
+ if column_name in treeviewcolumn:
+ column = treeviewcolumn[column_name]
+ self.treeview.move_column_after(column, base_column)
+ base_column = column
+
+ # set column width afeter set column order
+ for width, column in itertools.izip(
+ states_dict["widths"], self.treeview.get_columns()):
+ if width:
+ column.set_fixed_width(width)
+
+ self.window.set_default_size(
+ states_dict["window_width"], states_dict["window_height"])
+
+ if not states_dict["toolbar_visible"]:
gobject.idle_add(self.toolbar.parent.hide,
priority=gobject.PRIORITY_HIGH)
- if not statusbar_visible:
+ if not states_dict["statusbar_visible"]:
gobject.idle_add(self.statusbar.hide,
priority=gobject.PRIORITY_HIGH)
- if not filterbar_visible:
+ if not states_dict["filterbar_visible"]:
gobject.idle_add(self.filterbar.hide,
priority=gobject.PRIORITY_HIGH)
except: