OSDN Git Service

Rearrange board_window.WinWrap.restore.
authorAiwota Programmer <aiwotaprog@tetteke.tk>
Tue, 19 Sep 2006 20:34:44 +0000 (05:34 +0900)
committerAiwota Programmer <aiwotaprog@tetteke.tk>
Tue, 19 Sep 2006 20:34:44 +0000 (05:34 +0900)
src/FukuiNoNamari/board_window.py

index e778d91..f1460ee 100644 (file)
@@ -254,103 +254,123 @@ class WinWrap(winwrapbase.WinWrapBase, board_data.BoardData):
             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: