Show
Ignore:
Timestamp:
06/07/08 19:28:34 (6 months ago)
Author:
vardo
Message:

Added first version of 'Plugins' window. It's accessible through 'Edit/Plugins' item in roster menu. It seems that you can successfully (de)activate plug-ins through GUI now.

Added 'homepage' attribute to Plugin class.

Added (commented out) calls of pycallgraph in src/gajim.py for later use.

[xbright] Changed 'python' to 'python2.5' because code uses modules not available in previous versions of Python.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • branches/plugin-system/src/plugins/pluginmanager.py

    r9754 r9762  
    9595 
    9696                for path in gajim.PLUGINS_DIRS: 
    97                         self.plugins.extend(PluginManager.scan_dir_for_plugins(path)) 
     97                        self._add_plugins(PluginManager.scan_dir_for_plugins(path)) 
    9898 
    9999                log.debug('plugins: %s'%(self.plugins)) 
     
    103103                log.debug('active: %s'%(self.active_plugins)) 
    104104 
     105                 
     106        @log_calls('PluginManager') 
     107        def _add_plugin(self, plugin_class): 
     108                ''' 
     109                :todo: what about adding plug-ins that are already added? Module reload 
     110                and adding class from reloaded module or ignoring adding plug-in? 
     111                ''' 
     112                plugin_class._active = False 
     113                plugin_class._instance = None 
     114                self.plugins.append(plugin_class) 
     115         
     116        @log_calls('PluginManager') 
     117        def _add_plugins(self, plugin_classes): 
     118                for plugin_class in plugin_classes: 
     119                        self._add_plugin(plugin_class) 
     120                 
    105121        @log_calls('PluginManager') 
    106122        def gui_extension_point(self, gui_extpoint_name, *args): 
     
    125141                        Looking closer - we only rewrite tuples here. Real check should be 
    126142                        made in method that invokes gui_extpoints handlers. 
    127  
    128143                ''' 
    129144 
     
    142157 
    143158        @log_calls('PluginManager') 
    144         def activate_plugin(self, plugin): 
     159        def activate_plugin(self, plugin_class): 
    145160                ''' 
    146161                :param plugin: plugin to be activated 
     
    148163                ''' 
    149164                 
    150                 plugin_object = plugin() 
     165                plugin_object = plugin_class() 
    151166 
    152167                success = True 
     
    157172                if success: 
    158173                        self.active_plugins.append(plugin_object) 
     174                        plugin_class._instance = plugin_object 
     175                        plugin_class._active = True 
    159176 
    160177                return success 
     
    166183                for gui_extpoint_name, gui_extpoint_handlers in \ 
    167184                                plugin_object.gui_extension_points.iteritems(): 
    168                         for gui_extension_point_args in self.gui_extension_points[gui_extpoint_name]: 
    169                                 gui_extpoint_handlers[1](*gui_extension_point_args) 
     185                        if gui_extpoint_name in self.gui_extension_points: 
     186                                for gui_extension_point_args in self.gui_extension_points[gui_extpoint_name]: 
     187                                        gui_extpoint_handlers[1](*gui_extension_point_args) 
    170188                                 
    171189                # remove GUI extension points handlers (provided by plug-in) from 
     
    177195                # removing plug-in from active plug-ins list 
    178196                self.active_plugins.remove(plugin_object) 
     197                plugin_object.__class__._active = False 
     198                del plugin_object 
    179199                 
    180200        def deactivate_all_plugins(self):