mirror of
https://github.com/codex-storage/deluge.git
synced 2025-02-10 18:36:34 +00:00
plugin manager integrated into preferences
This commit is contained in:
parent
8d33015ef4
commit
4bea6f98ae
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
149
src/dialogs.py
149
src/dialogs.py
@ -40,7 +40,7 @@ import pref
|
|||||||
PREFS_FILENAME = "prefs.state"
|
PREFS_FILENAME = "prefs.state"
|
||||||
|
|
||||||
class PreferencesDlg:
|
class PreferencesDlg:
|
||||||
def __init__(self, preferences, active_port):
|
def __init__(self, preferences, active_port, plugins):
|
||||||
self.glade = gtk.glade.XML(common.get_glade_file("preferences_dialog.glade"), domain='deluge')
|
self.glade = gtk.glade.XML(common.get_glade_file("preferences_dialog.glade"), domain='deluge')
|
||||||
self.dialog = self.glade.get_widget("pref_dialog")
|
self.dialog = self.glade.get_widget("pref_dialog")
|
||||||
self.dialog.set_position(gtk.WIN_POS_CENTER)
|
self.dialog.set_position(gtk.WIN_POS_CENTER)
|
||||||
@ -55,6 +55,22 @@ class PreferencesDlg:
|
|||||||
|
|
||||||
self.preferences = preferences
|
self.preferences = preferences
|
||||||
self.active_port = str(active_port)
|
self.active_port = str(active_port)
|
||||||
|
#init plugin info
|
||||||
|
self.view = self.glade.get_widget("plugin_view")
|
||||||
|
self.store = gtk.ListStore(str, bool)
|
||||||
|
self.store.set_sort_column_id(0, gtk.SORT_ASCENDING)
|
||||||
|
self.view.set_model(self.store)
|
||||||
|
try:
|
||||||
|
self.view.get_selection().set_select_function(self.plugin_clicked, full=True)
|
||||||
|
except TypeError:
|
||||||
|
self.view.get_selection().set_select_function(self.old_clicked)
|
||||||
|
name_col = dgtk.add_text_column(self.view, _("Plugin"), 0)
|
||||||
|
name_col.set_expand(True)
|
||||||
|
dgtk.add_toggle_column(self.view, _("Enabled"), 1, toggled_signal=self.plugin_toggled)
|
||||||
|
signals = {'plugin_pref': self.plugin_pref,
|
||||||
|
'on_close_clicked': self.close_clicked}
|
||||||
|
self.glade.signal_autoconnect(signals)
|
||||||
|
self.plugins = plugins
|
||||||
|
|
||||||
def show(self, interface, window):
|
def show(self, interface, window):
|
||||||
# Load settings into dialog
|
# Load settings into dialog
|
||||||
@ -151,7 +167,16 @@ class PreferencesDlg:
|
|||||||
|
|
||||||
except KeyError:
|
except KeyError:
|
||||||
pass
|
pass
|
||||||
# Now, show the dialog
|
# plugin tab
|
||||||
|
self.store.clear()
|
||||||
|
for plugin in self.plugins.get_available_plugins():
|
||||||
|
#print plugin
|
||||||
|
if plugin in self.plugins.get_enabled_plugins():
|
||||||
|
self.store.append( (plugin, True) )
|
||||||
|
else:
|
||||||
|
self.store.append( (plugin, False) )
|
||||||
|
self.glade.get_widget("plugin_text").get_buffer().set_text("")
|
||||||
|
self.glade.get_widget("plugin_conf").set_sensitive(False)
|
||||||
self.dialog.set_transient_for(window)
|
self.dialog.set_transient_for(window)
|
||||||
self.dialog.show()
|
self.dialog.show()
|
||||||
|
|
||||||
@ -226,6 +251,48 @@ class PreferencesDlg:
|
|||||||
def cancel_clicked(self, source):
|
def cancel_clicked(self, source):
|
||||||
self.dialog.hide()
|
self.dialog.hide()
|
||||||
|
|
||||||
|
def close_clicked(self, source):
|
||||||
|
self.dialog.hide()
|
||||||
|
|
||||||
|
def old_clicked(self, path):
|
||||||
|
return self.plugin_clicked(self.view.get_selection(), self.store, path, False)
|
||||||
|
|
||||||
|
def plugin_clicked(self, selection, model, path, is_selected):
|
||||||
|
if is_selected:
|
||||||
|
return True
|
||||||
|
name = model.get_value(model.get_iter(path), 0)
|
||||||
|
plugin = self.plugins.get_plugin(name)
|
||||||
|
author = plugin.plugin_author
|
||||||
|
version = plugin.plugin_version
|
||||||
|
description = plugin.plugin_description
|
||||||
|
if name in self.plugins.get_enabled_plugins():
|
||||||
|
config = self.plugins.configurable_plugin(name)
|
||||||
|
self.glade.get_widget("plugin_conf").set_sensitive(config)
|
||||||
|
else:
|
||||||
|
self.glade.get_widget("plugin_conf").set_sensitive(False)
|
||||||
|
self.glade.get_widget("plugin_text").get_buffer(
|
||||||
|
).set_text("%s\nBy: %s\nVersion: %s\n\n%s"%
|
||||||
|
(name, author, version, description))
|
||||||
|
return True
|
||||||
|
|
||||||
|
def plugin_toggled(self, renderer, path):
|
||||||
|
plugin_iter = self.store.get_iter_from_string(path)
|
||||||
|
plugin_name = self.store.get_value(plugin_iter, 0)
|
||||||
|
plugin_value = not self.store.get_value(plugin_iter, 1)
|
||||||
|
self.store.set_value(plugin_iter, 1, plugin_value)
|
||||||
|
if plugin_value:
|
||||||
|
self.plugins.enable_plugin(plugin_name)
|
||||||
|
config = self.plugins.configurable_plugin(plugin_name)
|
||||||
|
self.glade.get_widget("plugin_conf").set_sensitive(config)
|
||||||
|
else:
|
||||||
|
self.plugins.disable_plugin(plugin_name)
|
||||||
|
self.glade.get_widget("plugin_conf").set_sensitive(False)
|
||||||
|
|
||||||
|
def plugin_pref(self, widget=None):
|
||||||
|
(model, plugin_iter) = self.view.get_selection().get_selected()
|
||||||
|
plugin_name = self.store.get_value(plugin_iter, 0)
|
||||||
|
self.plugins.configure_plugin(plugin_name, self.dialog)
|
||||||
|
|
||||||
def TestPort(self, widget):
|
def TestPort(self, widget):
|
||||||
common.open_url_in_browser('http://www.deluge-torrent.org/test-port.php?port=%s' % self.active_port)
|
common.open_url_in_browser('http://www.deluge-torrent.org/test-port.php?port=%s' % self.active_port)
|
||||||
|
|
||||||
@ -332,84 +399,6 @@ class FilesDlg:
|
|||||||
def get_priorities(self):
|
def get_priorities(self):
|
||||||
return self.files_manager.get_priorities()
|
return self.files_manager.get_priorities()
|
||||||
|
|
||||||
class PluginDlg:
|
|
||||||
def __init__(self, plugins):
|
|
||||||
self.glade = gtk.glade.XML(common.get_glade_file("plugin_dialog.glade"), domain='deluge')
|
|
||||||
self.dialog = self.glade.get_widget("plugin_dialog")
|
|
||||||
self.dialog.set_position(gtk.WIN_POS_CENTER)
|
|
||||||
self.dialog.set_icon_from_file(common.get_pixmap("deluge32.png"))
|
|
||||||
self.view = self.glade.get_widget("plugin_view")
|
|
||||||
self.store = gtk.ListStore(str, bool)
|
|
||||||
self.store.set_sort_column_id(0, gtk.SORT_ASCENDING)
|
|
||||||
self.view.set_model(self.store)
|
|
||||||
try:
|
|
||||||
self.view.get_selection().set_select_function(self.plugin_clicked, full=True)
|
|
||||||
except TypeError:
|
|
||||||
self.view.get_selection().set_select_function(self.old_clicked)
|
|
||||||
name_col = dgtk.add_text_column(self.view, _("Plugin"), 0)
|
|
||||||
name_col.set_expand(True)
|
|
||||||
dgtk.add_toggle_column(self.view, _("Enabled"), 1, toggled_signal=self.plugin_toggled)
|
|
||||||
signals = {'plugin_pref': self.plugin_pref,
|
|
||||||
'on_close_clicked': self.close_clicked}
|
|
||||||
self.glade.signal_autoconnect(signals)
|
|
||||||
self.plugins = plugins
|
|
||||||
|
|
||||||
def show(self, window):
|
|
||||||
self.store.clear()
|
|
||||||
for plugin in self.plugins.get_available_plugins():
|
|
||||||
#print plugin
|
|
||||||
if plugin in self.plugins.get_enabled_plugins():
|
|
||||||
self.store.append( (plugin, True) )
|
|
||||||
else:
|
|
||||||
self.store.append( (plugin, False) )
|
|
||||||
self.glade.get_widget("plugin_text").get_buffer().set_text("")
|
|
||||||
self.glade.get_widget("plugin_conf").set_sensitive(False)
|
|
||||||
self.dialog.set_transient_for(window)
|
|
||||||
self.dialog.show()
|
|
||||||
|
|
||||||
def close_clicked(self, source):
|
|
||||||
self.dialog.hide()
|
|
||||||
|
|
||||||
def old_clicked(self, path):
|
|
||||||
return self.plugin_clicked(self.view.get_selection(), self.store, path, False)
|
|
||||||
|
|
||||||
def plugin_clicked(self, selection, model, path, is_selected):
|
|
||||||
if is_selected:
|
|
||||||
return True
|
|
||||||
name = model.get_value(model.get_iter(path), 0)
|
|
||||||
plugin = self.plugins.get_plugin(name)
|
|
||||||
author = plugin.plugin_author
|
|
||||||
version = plugin.plugin_version
|
|
||||||
description = plugin.plugin_description
|
|
||||||
if name in self.plugins.get_enabled_plugins():
|
|
||||||
config = self.plugins.configurable_plugin(name)
|
|
||||||
self.glade.get_widget("plugin_conf").set_sensitive(config)
|
|
||||||
else:
|
|
||||||
self.glade.get_widget("plugin_conf").set_sensitive(False)
|
|
||||||
self.glade.get_widget("plugin_text").get_buffer(
|
|
||||||
).set_text("%s\nBy: %s\nVersion: %s\n\n%s"%
|
|
||||||
(name, author, version, description))
|
|
||||||
return True
|
|
||||||
|
|
||||||
def plugin_toggled(self, renderer, path):
|
|
||||||
plugin_iter = self.store.get_iter_from_string(path)
|
|
||||||
plugin_name = self.store.get_value(plugin_iter, 0)
|
|
||||||
plugin_value = not self.store.get_value(plugin_iter, 1)
|
|
||||||
self.store.set_value(plugin_iter, 1, plugin_value)
|
|
||||||
if plugin_value:
|
|
||||||
self.plugins.enable_plugin(plugin_name)
|
|
||||||
config = self.plugins.configurable_plugin(plugin_name)
|
|
||||||
self.glade.get_widget("plugin_conf").set_sensitive(config)
|
|
||||||
else:
|
|
||||||
self.plugins.disable_plugin(plugin_name)
|
|
||||||
self.glade.get_widget("plugin_conf").set_sensitive(False)
|
|
||||||
|
|
||||||
def plugin_pref(self, widget=None):
|
|
||||||
(model, plugin_iter) = self.view.get_selection().get_selected()
|
|
||||||
plugin_name = self.store.get_value(plugin_iter, 0)
|
|
||||||
self.plugins.configure_plugin(plugin_name, self.dialog)
|
|
||||||
|
|
||||||
|
|
||||||
def show_about_dialog(parent=None):
|
def show_about_dialog(parent=None):
|
||||||
def url_hook(dialog, url):
|
def url_hook(dialog, url):
|
||||||
common.open_url_in_browser(url)
|
common.open_url_in_browser(url)
|
||||||
|
@ -160,7 +160,6 @@ class DelugeGTK:
|
|||||||
## Edit Menu
|
## Edit Menu
|
||||||
"select_all_torrents": self.select_all_torrents,
|
"select_all_torrents": self.select_all_torrents,
|
||||||
"pref_clicked": self.show_preferences_dialog_clicked,
|
"pref_clicked": self.show_preferences_dialog_clicked,
|
||||||
"plugins_clicked": self.show_plugin_dialog_clicked,
|
|
||||||
## View Menu
|
## View Menu
|
||||||
"toolbar_toggle": self.toolbar_toggle,
|
"toolbar_toggle": self.toolbar_toggle,
|
||||||
"infopane_toggle": self.infopane_toggle,
|
"infopane_toggle": self.infopane_toggle,
|
||||||
@ -679,8 +678,7 @@ class DelugeGTK:
|
|||||||
|
|
||||||
def show_preferences_dialog(self):
|
def show_preferences_dialog(self):
|
||||||
active_port = self.manager.get_state()['port']
|
active_port = self.manager.get_state()['port']
|
||||||
preferences_dialog = dialogs.PreferencesDlg(self.config, active_port)
|
preferences_dialog = dialogs.PreferencesDlg(self.config, active_port, self.plugins)
|
||||||
# Only apply the prefs if the user clicked OK in the prefs dialog
|
|
||||||
preferences_dialog.show(self, self.window)
|
preferences_dialog.show(self, self.window)
|
||||||
|
|
||||||
def show_preferences_dialog_clicked(self, arg=None):
|
def show_preferences_dialog_clicked(self, arg=None):
|
||||||
@ -690,10 +688,6 @@ class DelugeGTK:
|
|||||||
else:
|
else:
|
||||||
self.show_preferences_dialog()
|
self.show_preferences_dialog()
|
||||||
|
|
||||||
def show_plugin_dialog_clicked(self, arg=None):
|
|
||||||
plugin_dialog = dialogs.PluginDlg(self.plugins)
|
|
||||||
plugin_dialog.show(self.window)
|
|
||||||
|
|
||||||
def apply_prefs(self):
|
def apply_prefs(self):
|
||||||
# Show tray icon if necessary
|
# Show tray icon if necessary
|
||||||
self.tray_icon.set_visible(self.config.get("enable_system_tray"))
|
self.tray_icon.set_visible(self.config.get("enable_system_tray"))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user