From 1448059d49cd357f1f2b5252b115a0047f956425 Mon Sep 17 00:00:00 2001 From: Aiwota Programmer Date: Mon, 18 Sep 2006 12:49:45 +0900 Subject: [PATCH] Add board plugin. --- src/FukuiNoNamari/board_plugins.py | 50 ++++++++++++++++++++++++++++++++++++++ src/FukuiNoNamari/board_window.py | 5 ++++ 2 files changed, 55 insertions(+) create mode 100644 src/FukuiNoNamari/board_plugins.py diff --git a/src/FukuiNoNamari/board_plugins.py b/src/FukuiNoNamari/board_plugins.py new file mode 100644 index 0000000..46f3b4a --- /dev/null +++ b/src/FukuiNoNamari/board_plugins.py @@ -0,0 +1,50 @@ +import os.path +from glob import glob +import imp +import traceback +import itertools + +import config + +base_path = os.path.join(config.get_config_dir_path(), "scripts") +version = (0, 1) + +def generate_board_plugin(): + plugin_list = [] + for module_path in glob(os.path.join(base_path, "board_*.py")): + module_name, ext = os.path.splitext(os.path.basename(module_path)) + try: + try: + file, filename, description = imp.find_module( + module_name, [base_path]) + module = imp.load_module( + module_name, file, filename, description) + finally: + if file: + file.close() + except ImportError: + traceback.print_exc() + else: + yield module + +def check_compatible(plugin_version): + if version[0] > plugin_version[0]: + return False + elif version[0] < plugin_version[0]: + return True + else: + return version[1] <= plugin_version[1] + +def load_plugin(plugin_module, treeview, menuitem): + try: + if check_compatible(plugin_module.version): + plugin_module.BoardPlugin(treeview, menuitem) + else: + print plugin_module.__file__, "not compatible", \ + plugin_module.version + except: + traceback.print_exc() + +def load(treeview, menuitem): + for i in itertools.imap(lambda e: load_plugin(e, treeview, menuitem), + generate_board_plugin()): -1 diff --git a/src/FukuiNoNamari/board_window.py b/src/FukuiNoNamari/board_window.py index 3478f1b..f0745d6 100644 --- a/src/FukuiNoNamari/board_window.py +++ b/src/FukuiNoNamari/board_window.py @@ -37,6 +37,7 @@ import winwrapbase from misc import ThreadInvoker import bookmark_list import bookmark_window +import board_plugins GLADE_FILENAME = "board_window.glade" @@ -131,6 +132,10 @@ class WinWrap(winwrapbase.WinWrapBase, board_data.BoardData): "on_popup_menu_open_activate": self.on_open_thread} self.widget_tree.signal_autoconnect(sigdic) + # menu plugins + self.edit1 = self.widget_tree.get_widget("edit1").get_submenu() + board_plugins.load(self.treeview, self.edit1) + self.restore() self.window.show() -- 2.11.0