Added GajimPluginConfigDialog class - dialog that plugins should use to present configuration to user.

Now, 'Configure' button is invoked only for plug-ins that have config_dialog.
This commit is contained in:
Mateusz Biliński 2008-06-19 12:56:45 +00:00
parent 8581b862e1
commit aaf5b30129
6 changed files with 79 additions and 10 deletions

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd"> <!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
<!--Generated with glade3 3.4.5 on Mon Jun 9 15:22:01 2008 --> <!--Generated with glade3 3.4.5 on Thu Jun 19 13:11:54 2008 -->
<glade-interface> <glade-interface>
<widget class="GtkWindow" id="plugins_window"> <widget class="GtkWindow" id="plugins_window">
<property name="width_request">650</property> <property name="width_request">650</property>
@ -242,6 +242,7 @@
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="receives_default">True</property> <property name="receives_default">True</property>
<property name="response_id">0</property> <property name="response_id">0</property>
<signal name="clicked" handler="on_uninstall_plugin_button_clicked"/>
<child> <child>
<widget class="GtkHBox" id="hbox11"> <widget class="GtkHBox" id="hbox11">
<property name="visible">True</property> <property name="visible">True</property>
@ -270,6 +271,7 @@
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="receives_default">True</property> <property name="receives_default">True</property>
<property name="response_id">0</property> <property name="response_id">0</property>
<signal name="clicked" handler="on_configure_plugin_button_clicked"/>
<child> <child>
<widget class="GtkHBox" id="hbox12"> <widget class="GtkHBox" id="hbox12">
<property name="visible">True</property> <property name="visible">True</property>

View file

@ -44,6 +44,8 @@ class AcronymsExpanderPlugin(GajimPlugin):
#super(AcronymsExpanderPlugin, self).__init__() #super(AcronymsExpanderPlugin, self).__init__()
def init(self): def init(self):
self.config_dialog = None
self.gui_extension_points = { self.gui_extension_points = {
'chat_control_base' : (self.connect_with_chat_control_base, 'chat_control_base' : (self.connect_with_chat_control_base,
self.disconnect_from_chat_control_base) self.disconnect_from_chat_control_base)

View file

@ -45,6 +45,8 @@ class LengthNotifierPlugin(GajimPlugin):
@log_calls('LengthNotifierPlugin') @log_calls('LengthNotifierPlugin')
def init(self): def init(self):
#self.config_dialog = None
self.gui_extension_points = { self.gui_extension_points = {
'chat_control' : (self.connect_with_chat_control, 'chat_control' : (self.connect_with_chat_control,
self.disconnect_from_chat_control) self.disconnect_from_chat_control)

View file

@ -52,6 +52,8 @@ class RosterButtonsPlugin(GajimPlugin):
self.roster_vbox = gajim.interface.roster.xml.get_widget('roster_vbox2') self.roster_vbox = gajim.interface.roster.xml.get_widget('roster_vbox2')
self.show_offline_contacts_menuitem = gajim.interface.roster.xml.get_widget('show_offline_contacts_menuitem') self.show_offline_contacts_menuitem = gajim.interface.roster.xml.get_widget('show_offline_contacts_menuitem')
self.config_dialog = None
@log_calls('RosterButtonsPlugin') @log_calls('RosterButtonsPlugin')
def activate(self): def activate(self):

View file

@ -117,7 +117,10 @@ class PluginsWindow(object):
desc_textbuffer.set_text(plugin.description) desc_textbuffer.set_text(plugin.description)
self.plugin_description_textview.set_property('sensitive', True) self.plugin_description_textview.set_property('sensitive', True)
self.uninstall_plugin_button.set_property('sensitive', True) self.uninstall_plugin_button.set_property('sensitive', True)
self.configure_plugin_button.set_property('sensitive', True) if plugin.config_dialog is None:
self.configure_plugin_button.set_property('sensitive', False)
else:
self.configure_plugin_button.set_property('sensitive', True)
def _clear_installed_plugin_info(self): def _clear_installed_plugin_info(self):
self.plugin_name_label.set_text('') self.plugin_name_label.set_text('')
@ -163,4 +166,54 @@ class PluginsWindow(object):
@log_calls('PluginsWindow') @log_calls('PluginsWindow')
def on_close_button_clicked(self, widget): def on_close_button_clicked(self, widget):
self.window.destroy() self.window.destroy()
@log_calls('PluginsWindow')
def on_configure_plugin_button_clicked(self, widget):
log.debug('widget: %s'%(widget))
selection = self.installed_plugins_treeview.get_selection()
model, iter = selection.get_selected()
if iter:
plugin = model.get_value(iter, 0)
plugin_name = model.get_value(iter, 1)
is_active = model.get_value(iter, 2)
result = plugin.config_dialog.run(self.window)
else:
# No plugin selected. this should never be reached. As configure
# plugin button should only my clickable when plugin is selected.
# XXX: maybe throw exception here?
pass
@log_calls('PluginsWindow')
def on_uninstall_plugin_button_clicked(self, widget):
pass
class GajimPluginConfigDialog(gtk.Dialog):
@log_calls('GajimPluginConfigDialog')
def __init__(self, plugin, **kwargs):
# TRANSLATORS: The window title for the generic configuration dialog of plugins
gtk.Dialog.__init__(self, '%s : %s'%(_('Configuration'), plugin.name), **kwargs)
self.plugin = plugin
self.add_button('gtk-close', gtk.RESPONSE_CLOSE)
self.main = self.child
self.main.set_spacing(3)
# TRANSLATORS: Short text stating which plugin a configuration dialog is for
label = gtk.Label(_('<b>%s Configuration</b>') % (plugin.name))
label.set_markup(label.get_label())
self.main.pack_start(label, False, False)
@log_calls('GajimPluginConfigDialog')
def run(self, parent=None):
self.reparent(parent)
self.show_all()
result = super(GajimPluginConfigDialog, self).run()
self.hide()
return result

View file

@ -27,6 +27,7 @@ Base class for implementing plugin.
import os import os
from plugins.helpers import log_calls from plugins.helpers import log_calls
from plugins.gui import GajimPluginConfigDialog
class GajimPlugin(object): class GajimPlugin(object):
''' '''
@ -96,28 +97,29 @@ class GajimPlugin(object):
@log_calls('GajimPlugin') @log_calls('GajimPlugin')
def __init__(self): def __init__(self):
self.config = Config() self.config = GajimPluginConfig()
''' '''
Plug-in configuration dictionary. Plug-in configuration dictionary.
Automatically saved and loaded and plug-in (un)load. Automatically saved and loaded and plug-in (un)load.
:type: `plugins.plugin.Config` :type: `plugins.plugin.GajimPluginConfig`
''' '''
self.load_config() self.load_config()
self.config_dialog = GajimPluginConfigDialog(self)
self.init() self.init()
@log_calls('GajimPlugin') @log_calls('GajimPlugin')
def save_config(self): def save_config(self):
pass self.config.save()
@log_calls('GajimPlugin') @log_calls('GajimPlugin')
def load_config(self): def load_config(self):
pass self.config.load()
@log_calls('GajimPlugin') @log_calls('GajimPlugin')
def __del__(self): def __del__(self):
self._save_config() self.save_config()
@log_calls('GajimPlugin') @log_calls('GajimPlugin')
def local_file_path(self, file_name): def local_file_path(self, file_name):
@ -135,5 +137,11 @@ class GajimPlugin(object):
def deactivate(self): def deactivate(self):
pass pass
class Config(dict): class GajimPluginConfig(dict):
pass @log_calls('GajimPluginConfig')
def save(self):
pass
@log_calls('GajimPluginConfig')
def load(self):
pass