Moved the preferences dialog to GtkBuilder.

This commit is contained in:
Pedro Algarvio 2011-07-06 20:56:58 +01:00
parent bad228645c
commit 5a81ab3c35
3 changed files with 1658 additions and 1450 deletions

View File

@ -59,16 +59,10 @@ class GtkUI(GtkPluginBase):
if parent: if parent:
parent.remove(self.prefs) parent.remove(self.prefs)
# chk_ap = component.get("Preferences").glade.get_widget('chk_add_paused') self.downloads_vbox = component.get("Preferences").builder.get_object('downloads_vbox')
# downloads_vbox = chk_ap.get_parent().get_parent().get_parent().get_parent() self.downloads_vbox.pack_start(self.prefs, False, True, 0)
downloads_vbox = component.get("Preferences").glade.get_widget('vbox1') component.get("PluginManager").register_hook("on_apply_prefs", self.on_apply_prefs)
downloads_vbox.pack_start(self.prefs, False, True, 0)
# self.prefs.set_parent(frame)
# component.get("Preferences").add_page("FreeSpace", self.glade.get_widget("prefs_box"))
component.get("PluginManager").register_hook("on_apply_prefs",
self.on_apply_prefs)
component.get("PluginManager").register_hook("on_show_prefs", component.get("PluginManager").register_hook("on_show_prefs",
self.on_show_prefs) self.on_show_prefs)
@ -86,18 +80,13 @@ class GtkUI(GtkPluginBase):
except KeyError: except KeyError:
pass pass
client.register_event_handler("PluginEnabledEvent", client.register_event_handler("PluginEnabledEvent", self.__on_plugin_enabled)
self.__on_plugin_enabled) client.register_event_handler("PluginDisabledEvent", self.__on_plugin_disabled)
client.register_event_handler("PluginDisabledEvent",
self.__on_plugin_disabled)
def disable(self): def disable(self):
component.get("Preferences").remove_page("FreeSpace") self.downloads_vbox.remove(self.prefs)
component.get("PluginManager").deregister_hook("on_apply_prefs", component.get("PluginManager").deregister_hook("on_apply_prefs", self.on_apply_prefs)
self.on_apply_prefs) component.get("PluginManager").deregister_hook("on_show_prefs", self.on_show_prefs)
component.get("PluginManager").deregister_hook("on_show_prefs",
self.on_show_prefs)
try: try:
notifications = component.get("GtkPlugin.Notifications") notifications = component.get("GtkPlugin.Notifications")
notifications.deregister_custom_popup_notification( notifications.deregister_custom_popup_notification(

View File

@ -64,18 +64,19 @@ COLOR_STATES = {
class Preferences(component.Component): class Preferences(component.Component):
def __init__(self): def __init__(self):
component.Component.__init__(self, "Preferences") component.Component.__init__(self, "Preferences")
self.glade = gtk.glade.XML(deluge.common.resource_filename( self.builder = gtk.Builder()
"deluge.ui.gtkui", os.path.join("glade", "preferences_dialog.glade") self.builder.add_from_file(deluge.common.resource_filename(
"deluge.ui.gtkui", os.path.join("glade", "preferences_dialog.ui")
)) ))
self.pref_dialog = self.glade.get_widget("pref_dialog") self.pref_dialog = self.builder.get_object("pref_dialog")
self.pref_dialog.set_icon(common.get_deluge_icon()) self.pref_dialog.set_icon(common.get_deluge_icon())
self.treeview = self.glade.get_widget("treeview") self.treeview = self.builder.get_object("treeview")
self.notebook = self.glade.get_widget("notebook") self.notebook = self.builder.get_object("notebook")
self.gtkui_config = ConfigManager("gtkui.conf") self.gtkui_config = ConfigManager("gtkui.conf")
self.load_pref_dialog_state() self.load_pref_dialog_state()
self.glade.get_widget("image_magnet").set_from_file( self.builder.get_object("image_magnet").set_from_file(
deluge.common.get_pixmap("magnet.png")) deluge.common.get_pixmap("magnet.png"))
# Setup the liststore for the categories (tab pages) # Setup the liststore for the categories (tab pages)
@ -86,19 +87,17 @@ class Preferences(component.Component):
self.treeview.append_column(column) self.treeview.append_column(column)
# Add the default categories # Add the default categories
i = 0 i = 0
for category in [_("Downloads"), _("Network"), _("Bandwidth"), for category in (_("Downloads"), _("Network"), _("Bandwidth"), _("Interface"), _("Other"),
_("Interface"), _("Other"), _("Daemon"), _("Queue"), _("Proxy"), _("Daemon"), _("Queue"), _("Proxy"), _("Cache"), _("Plugins")):
_("Cache"), _("Plugins")]:
self.liststore.append([i, category]) self.liststore.append([i, category])
i += 1 i += 1
# Setup accounts tab lisview # Setup accounts tab lisview
self.accounts_levels_mapping = None self.accounts_levels_mapping = None
self.accounts_authlevel = self.glade.get_widget("accounts_authlevel") self.accounts_authlevel = self.builder.get_object("accounts_authlevel")
self.accounts_liststore = gtk.ListStore(str, str, str, int) self.accounts_liststore = gtk.ListStore(str, str, str, int)
self.accounts_liststore.set_sort_column_id(ACCOUNTS_USERNAME, self.accounts_liststore.set_sort_column_id(ACCOUNTS_USERNAME, gtk.SORT_ASCENDING)
gtk.SORT_ASCENDING) self.accounts_listview = self.builder.get_object("accounts_listview")
self.accounts_listview = self.glade.get_widget("accounts_listview")
self.accounts_listview.append_column( self.accounts_listview.append_column(
gtk.TreeViewColumn( gtk.TreeViewColumn(
_("Username"), gtk.CellRendererText(), text=ACCOUNTS_USERNAME _("Username"), gtk.CellRendererText(), text=ACCOUNTS_USERNAME
@ -119,12 +118,12 @@ class Preferences(component.Component):
self.accounts_listview.get_selection().connect( self.accounts_listview.get_selection().connect(
"changed", self._on_accounts_selection_changed "changed", self._on_accounts_selection_changed
) )
self.accounts_frame = self.glade.get_widget("AccountsFrame") self.accounts_frame = self.builder.get_object("AccountsFrame")
# Setup plugin tab listview # Setup plugin tab listview
self.plugin_liststore = gtk.ListStore(str, bool) self.plugin_liststore = gtk.ListStore(str, bool)
self.plugin_liststore.set_sort_column_id(0, gtk.SORT_ASCENDING) self.plugin_liststore.set_sort_column_id(0, gtk.SORT_ASCENDING)
self.plugin_listview = self.glade.get_widget("plugin_listview") self.plugin_listview = self.builder.get_object("plugin_listview")
self.plugin_listview.set_model(self.plugin_liststore) self.plugin_listview.set_model(self.plugin_liststore)
render = gtk.CellRendererToggle() render = gtk.CellRendererToggle()
render.connect("toggled", self.on_plugin_toggled) render.connect("toggled", self.on_plugin_toggled)
@ -144,7 +143,7 @@ class Preferences(component.Component):
"changed", self.on_plugin_selection_changed "changed", self.on_plugin_selection_changed
) )
self.glade.signal_autoconnect({ self.builder.connect_signals({
"on_pref_dialog_delete_event": self.on_pref_dialog_delete_event, "on_pref_dialog_delete_event": self.on_pref_dialog_delete_event,
"on_button_ok_clicked": self.on_button_ok_clicked, "on_button_ok_clicked": self.on_button_ok_clicked,
"on_button_apply_clicked": self.on_button_apply_clicked, "on_button_apply_clicked": self.on_button_apply_clicked,
@ -395,39 +394,39 @@ class Preferences(component.Component):
# Change a few widgets if we're connected to a remote host # Change a few widgets if we're connected to a remote host
if not client.is_localhost(): if not client.is_localhost():
self.glade.get_widget("entry_download_path").show() self.builder.get_object("entry_download_path").show()
self.glade.get_widget("download_path_button").hide() self.builder.get_object("download_path_button").hide()
core_widgets.pop("download_path_button") core_widgets.pop("download_path_button")
core_widgets["entry_download_path"] = ( core_widgets["entry_download_path"] = (
"text", self.core_config["download_location"] "text", self.core_config["download_location"]
) )
self.glade.get_widget("entry_move_completed_path").show() self.builder.get_object("entry_move_completed_path").show()
self.glade.get_widget("move_completed_path_button").hide() self.builder.get_object("move_completed_path_button").hide()
core_widgets.pop("move_completed_path_button") core_widgets.pop("move_completed_path_button")
core_widgets["entry_move_completed_path"] = ( core_widgets["entry_move_completed_path"] = (
"text", self.core_config["move_completed_path"] "text", self.core_config["move_completed_path"]
) )
self.glade.get_widget("entry_torrents_path").show() self.builder.get_object("entry_torrents_path").show()
self.glade.get_widget("torrent_files_button").hide() self.builder.get_object("torrent_files_button").hide()
core_widgets.pop("torrent_files_button") core_widgets.pop("torrent_files_button")
core_widgets["entry_torrents_path"] = ( core_widgets["entry_torrents_path"] = (
"text", self.core_config["torrentfiles_location"] "text", self.core_config["torrentfiles_location"]
) )
else: else:
self.glade.get_widget("entry_download_path").hide() self.builder.get_object("entry_download_path").hide()
self.glade.get_widget("download_path_button").show() self.builder.get_object("download_path_button").show()
self.glade.get_widget("entry_move_completed_path").hide() self.builder.get_object("entry_move_completed_path").hide()
self.glade.get_widget("move_completed_path_button").show() self.builder.get_object("move_completed_path_button").show()
self.glade.get_widget("entry_torrents_path").hide() self.builder.get_object("entry_torrents_path").hide()
self.glade.get_widget("torrent_files_button").show() self.builder.get_object("torrent_files_button").show()
# Update the widgets accordingly # Update the widgets accordingly
for key in core_widgets.keys(): for key in core_widgets.keys():
modifier = core_widgets[key][0] modifier = core_widgets[key][0]
value = core_widgets[key][1] value = core_widgets[key][1]
widget = self.glade.get_widget(key) widget = self.builder.get_object(key)
if type(widget) == gtk.FileChooserButton: if type(widget) == gtk.FileChooserButton:
for child in widget.get_children(): for child in widget.get_children():
child.set_sensitive(True) child.set_sensitive(True)
@ -449,7 +448,7 @@ class Preferences(component.Component):
widget.set_text(value) widget.set_text(value)
for key in core_widgets.keys(): for key in core_widgets.keys():
widget = self.glade.get_widget(key) widget = self.builder.get_object(key)
# Update the toggle status if necessary # Update the toggle status if necessary
self.on_toggle(widget) self.on_toggle(widget)
else: else:
@ -526,34 +525,34 @@ class Preferences(component.Component):
# We don't appear to be connected to a daemon # We don't appear to be connected to a daemon
for key in core_widget_list: for key in core_widget_list:
widget = self.glade.get_widget(key) widget = self.builder.get_object(key)
if type(widget) == gtk.FileChooserButton: if type(widget) == gtk.FileChooserButton:
for child in widget.get_children(): for child in widget.get_children():
child.set_sensitive(False) child.set_sensitive(False)
widget.set_sensitive(False) widget.set_sensitive(False)
## Downloads tab ## ## Downloads tab ##
self.glade.get_widget("chk_show_dialog").set_active( self.builder.get_object("chk_show_dialog").set_active(
self.gtkui_config["interactive_add"]) self.gtkui_config["interactive_add"])
self.glade.get_widget("chk_focus_dialog").set_active( self.builder.get_object("chk_focus_dialog").set_active(
self.gtkui_config["focus_add_dialog"]) self.gtkui_config["focus_add_dialog"])
## Interface tab ## ## Interface tab ##
self.glade.get_widget("chk_use_tray").set_active( self.builder.get_object("chk_use_tray").set_active(
self.gtkui_config["enable_system_tray"]) self.gtkui_config["enable_system_tray"])
self.glade.get_widget("chk_min_on_close").set_active( self.builder.get_object("chk_min_on_close").set_active(
self.gtkui_config["close_to_tray"]) self.gtkui_config["close_to_tray"])
self.glade.get_widget("chk_start_in_tray").set_active( self.builder.get_object("chk_start_in_tray").set_active(
self.gtkui_config["start_in_tray"]) self.gtkui_config["start_in_tray"])
self.glade.get_widget("chk_enable_appindicator").set_active( self.builder.get_object("chk_enable_appindicator").set_active(
self.gtkui_config["enable_appindicator"]) self.gtkui_config["enable_appindicator"])
self.glade.get_widget("chk_lock_tray").set_active( self.builder.get_object("chk_lock_tray").set_active(
self.gtkui_config["lock_tray"]) self.gtkui_config["lock_tray"])
self.glade.get_widget("chk_classic_mode").set_active( self.builder.get_object("chk_classic_mode").set_active(
self.gtkui_config["classic_mode"]) self.gtkui_config["classic_mode"])
self.glade.get_widget("chk_show_rate_in_title").set_active( self.builder.get_object("chk_show_rate_in_title").set_active(
self.gtkui_config["show_rate_in_title"]) self.gtkui_config["show_rate_in_title"])
self.glade.get_widget("piecesbar_toggle").set_active( self.builder.get_object("piecesbar_toggle").set_active(
self.gtkui_config["show_piecesbar"] self.gtkui_config["show_piecesbar"]
) )
self.__set_color("completed", from_config=True) self.__set_color("completed", from_config=True)
@ -562,7 +561,7 @@ class Preferences(component.Component):
self.__set_color("missing", from_config=True) self.__set_color("missing", from_config=True)
## Other tab ## ## Other tab ##
self.glade.get_widget("chk_show_new_releases").set_active( self.builder.get_object("chk_show_new_releases").set_active(
self.gtkui_config["show_new_releases"]) self.gtkui_config["show_new_releases"])
@ -608,201 +607,201 @@ class Preferences(component.Component):
## Downloads tab ## ## Downloads tab ##
new_gtkui_config["interactive_add"] = \ new_gtkui_config["interactive_add"] = \
self.glade.get_widget("chk_show_dialog").get_active() self.builder.get_object("chk_show_dialog").get_active()
new_gtkui_config["focus_add_dialog"] = \ new_gtkui_config["focus_add_dialog"] = \
self.glade.get_widget("chk_focus_dialog").get_active() self.builder.get_object("chk_focus_dialog").get_active()
for state in ("missing", "waiting", "downloading", "completed"): for state in ("missing", "waiting", "downloading", "completed"):
color = self.glade.get_widget("%s_color" % state).get_color() color = self.builder.get_object("%s_color" % state).get_color()
new_gtkui_config["pieces_color_%s" % state] = [ new_gtkui_config["pieces_color_%s" % state] = [
color.red, color.green, color.blue color.red, color.green, color.blue
] ]
new_core_config["copy_torrent_file"] = \ new_core_config["copy_torrent_file"] = \
self.glade.get_widget("chk_copy_torrent_file").get_active() self.builder.get_object("chk_copy_torrent_file").get_active()
new_core_config["del_copy_torrent_file"] = \ new_core_config["del_copy_torrent_file"] = \
self.glade.get_widget("chk_del_copy_torrent_file").get_active() self.builder.get_object("chk_del_copy_torrent_file").get_active()
new_core_config["move_completed"] = \ new_core_config["move_completed"] = \
self.glade.get_widget("chk_move_completed").get_active() self.builder.get_object("chk_move_completed").get_active()
if client.is_localhost(): if client.is_localhost():
new_core_config["download_location"] = \ new_core_config["download_location"] = \
self.glade.get_widget("download_path_button").get_filename() self.builder.get_object("download_path_button").get_filename()
new_core_config["move_completed_path"] = \ new_core_config["move_completed_path"] = \
self.glade.get_widget("move_completed_path_button").get_filename() self.builder.get_object("move_completed_path_button").get_filename()
new_core_config["torrentfiles_location"] = \ new_core_config["torrentfiles_location"] = \
self.glade.get_widget("torrent_files_button").get_filename() self.builder.get_object("torrent_files_button").get_filename()
else: else:
new_core_config["download_location"] = \ new_core_config["download_location"] = \
self.glade.get_widget("entry_download_path").get_text() self.builder.get_object("entry_download_path").get_text()
new_core_config["move_completed_path"] = \ new_core_config["move_completed_path"] = \
self.glade.get_widget("entry_move_completed_path").get_text() self.builder.get_object("entry_move_completed_path").get_text()
new_core_config["torrentfiles_location"] = \ new_core_config["torrentfiles_location"] = \
self.glade.get_widget("entry_torrents_path").get_text() self.builder.get_object("entry_torrents_path").get_text()
new_core_config["compact_allocation"] = \ new_core_config["compact_allocation"] = \
self.glade.get_widget("radio_compact_allocation").get_active() self.builder.get_object("radio_compact_allocation").get_active()
new_core_config["prioritize_first_last_pieces"] = \ new_core_config["prioritize_first_last_pieces"] = \
self.glade.get_widget( self.builder.get_object(
"chk_prioritize_first_last_pieces").get_active() "chk_prioritize_first_last_pieces").get_active()
new_core_config["sequential_download"] = \ new_core_config["sequential_download"] = \
self.glade.get_widget("chk_sequential_download").get_active() self.builder.get_object("chk_sequential_download").get_active()
new_core_config["sequential_download"] = \ new_core_config["sequential_download"] = \
self.glade.get_widget("radio_compact_allocation").get_active() and \ self.builder.get_object("radio_compact_allocation").get_active() and \
False or self.glade.get_widget("chk_sequential_download").get_active() False or self.builder.get_object("chk_sequential_download").get_active()
new_core_config["add_paused"] = \ new_core_config["add_paused"] = \
self.glade.get_widget("chk_add_paused").get_active() self.builder.get_object("chk_add_paused").get_active()
## Network tab ## ## Network tab ##
listen_ports = ( listen_ports = (
self.glade.get_widget("spin_port_min").get_value_as_int(), self.builder.get_object("spin_port_min").get_value_as_int(),
self.glade.get_widget("spin_port_max").get_value_as_int() self.builder.get_object("spin_port_max").get_value_as_int()
) )
new_core_config["listen_ports"] = listen_ports new_core_config["listen_ports"] = listen_ports
new_core_config["random_port"] = \ new_core_config["random_port"] = \
self.glade.get_widget("chk_random_port").get_active() self.builder.get_object("chk_random_port").get_active()
outgoing_ports = ( outgoing_ports = (
self.glade.get_widget("spin_outgoing_port_min").get_value_as_int(), self.builder.get_object("spin_outgoing_port_min").get_value_as_int(),
self.glade.get_widget("spin_outgoing_port_max").get_value_as_int() self.builder.get_object("spin_outgoing_port_max").get_value_as_int()
) )
new_core_config["outgoing_ports"] = outgoing_ports new_core_config["outgoing_ports"] = outgoing_ports
new_core_config["random_outgoing_ports"] = \ new_core_config["random_outgoing_ports"] = \
self.glade.get_widget("chk_random_outgoing_ports").get_active() self.builder.get_object("chk_random_outgoing_ports").get_active()
new_core_config["listen_interface"] = self.glade.get_widget("entry_interface").get_text() new_core_config["listen_interface"] = self.builder.get_object("entry_interface").get_text()
new_core_config["peer_tos"] = self.glade.get_widget("entry_peer_tos").get_text() new_core_config["peer_tos"] = self.builder.get_object("entry_peer_tos").get_text()
new_core_config["dht"] = self.glade.get_widget("chk_dht").get_active() new_core_config["dht"] = self.builder.get_object("chk_dht").get_active()
new_core_config["upnp"] = self.glade.get_widget("chk_upnp").get_active() new_core_config["upnp"] = self.builder.get_object("chk_upnp").get_active()
new_core_config["natpmp"] = \ new_core_config["natpmp"] = \
self.glade.get_widget("chk_natpmp").get_active() self.builder.get_object("chk_natpmp").get_active()
new_core_config["utpex"] = \ new_core_config["utpex"] = \
self.glade.get_widget("chk_utpex").get_active() self.builder.get_object("chk_utpex").get_active()
new_core_config["lsd"] = \ new_core_config["lsd"] = \
self.glade.get_widget("chk_lsd").get_active() self.builder.get_object("chk_lsd").get_active()
new_core_config["enc_in_policy"] = \ new_core_config["enc_in_policy"] = \
self.glade.get_widget("combo_encin").get_active() self.builder.get_object("combo_encin").get_active()
new_core_config["enc_out_policy"] = \ new_core_config["enc_out_policy"] = \
self.glade.get_widget("combo_encout").get_active() self.builder.get_object("combo_encout").get_active()
new_core_config["enc_level"] = \ new_core_config["enc_level"] = \
self.glade.get_widget("combo_enclevel").get_active() self.builder.get_object("combo_enclevel").get_active()
new_core_config["enc_prefer_rc4"] = \ new_core_config["enc_prefer_rc4"] = \
self.glade.get_widget("chk_pref_rc4").get_active() self.builder.get_object("chk_pref_rc4").get_active()
## Bandwidth tab ## ## Bandwidth tab ##
new_core_config["max_connections_global"] = \ new_core_config["max_connections_global"] = \
self.glade.get_widget( self.builder.get_object(
"spin_max_connections_global").get_value_as_int() "spin_max_connections_global").get_value_as_int()
new_core_config["max_download_speed"] = \ new_core_config["max_download_speed"] = \
self.glade.get_widget("spin_max_download").get_value() self.builder.get_object("spin_max_download").get_value()
new_core_config["max_upload_speed"] = \ new_core_config["max_upload_speed"] = \
self.glade.get_widget("spin_max_upload").get_value() self.builder.get_object("spin_max_upload").get_value()
new_core_config["max_upload_slots_global"] = \ new_core_config["max_upload_slots_global"] = \
self.glade.get_widget( self.builder.get_object(
"spin_max_upload_slots_global").get_value_as_int() "spin_max_upload_slots_global").get_value_as_int()
new_core_config["max_half_open_connections"] = \ new_core_config["max_half_open_connections"] = \
self.glade.get_widget("spin_max_half_open_connections").get_value_as_int() self.builder.get_object("spin_max_half_open_connections").get_value_as_int()
new_core_config["max_connections_per_second"] = \ new_core_config["max_connections_per_second"] = \
self.glade.get_widget( self.builder.get_object(
"spin_max_connections_per_second").get_value_as_int() "spin_max_connections_per_second").get_value_as_int()
new_core_config["max_connections_per_torrent"] = \ new_core_config["max_connections_per_torrent"] = \
self.glade.get_widget( self.builder.get_object(
"spin_max_connections_per_torrent").get_value_as_int() "spin_max_connections_per_torrent").get_value_as_int()
new_core_config["max_upload_slots_per_torrent"] = \ new_core_config["max_upload_slots_per_torrent"] = \
self.glade.get_widget( self.builder.get_object(
"spin_max_upload_slots_per_torrent").get_value_as_int() "spin_max_upload_slots_per_torrent").get_value_as_int()
new_core_config["max_upload_speed_per_torrent"] = \ new_core_config["max_upload_speed_per_torrent"] = \
self.glade.get_widget( self.builder.get_object(
"spin_max_upload_per_torrent").get_value() "spin_max_upload_per_torrent").get_value()
new_core_config["max_download_speed_per_torrent"] = \ new_core_config["max_download_speed_per_torrent"] = \
self.glade.get_widget( self.builder.get_object(
"spin_max_download_per_torrent").get_value() "spin_max_download_per_torrent").get_value()
new_core_config["ignore_limits_on_local_network"] = \ new_core_config["ignore_limits_on_local_network"] = \
self.glade.get_widget("chk_ignore_limits_on_local_network").get_active() self.builder.get_object("chk_ignore_limits_on_local_network").get_active()
new_core_config["rate_limit_ip_overhead"] = \ new_core_config["rate_limit_ip_overhead"] = \
self.glade.get_widget("chk_rate_limit_ip_overhead").get_active() self.builder.get_object("chk_rate_limit_ip_overhead").get_active()
## Interface tab ## ## Interface tab ##
new_gtkui_config["enable_system_tray"] = \ new_gtkui_config["enable_system_tray"] = \
self.glade.get_widget("chk_use_tray").get_active() self.builder.get_object("chk_use_tray").get_active()
new_gtkui_config["close_to_tray"] = \ new_gtkui_config["close_to_tray"] = \
self.glade.get_widget("chk_min_on_close").get_active() self.builder.get_object("chk_min_on_close").get_active()
new_gtkui_config["start_in_tray"] = \ new_gtkui_config["start_in_tray"] = \
self.glade.get_widget("chk_start_in_tray").get_active() self.builder.get_object("chk_start_in_tray").get_active()
new_gtkui_config["enable_appindicator"] = \ new_gtkui_config["enable_appindicator"] = \
self.glade.get_widget("chk_enable_appindicator").get_active() self.builder.get_object("chk_enable_appindicator").get_active()
new_gtkui_config["lock_tray"] = \ new_gtkui_config["lock_tray"] = \
self.glade.get_widget("chk_lock_tray").get_active() self.builder.get_object("chk_lock_tray").get_active()
passhex = sha_hash(\ passhex = sha_hash(\
self.glade.get_widget("txt_tray_password").get_text()).hexdigest() self.builder.get_object("txt_tray_password").get_text()).hexdigest()
if passhex != "c07eb5a8c0dc7bb81c217b67f11c3b7a5e95ffd7": if passhex != "c07eb5a8c0dc7bb81c217b67f11c3b7a5e95ffd7":
new_gtkui_config["tray_password"] = passhex new_gtkui_config["tray_password"] = passhex
new_gtkui_in_classic_mode = self.glade.get_widget("chk_classic_mode").get_active() new_gtkui_in_classic_mode = self.builder.get_object("chk_classic_mode").get_active()
new_gtkui_config["classic_mode"] = new_gtkui_in_classic_mode new_gtkui_config["classic_mode"] = new_gtkui_in_classic_mode
new_gtkui_config["show_rate_in_title"] = \ new_gtkui_config["show_rate_in_title"] = \
self.glade.get_widget("chk_show_rate_in_title").get_active() self.builder.get_object("chk_show_rate_in_title").get_active()
## Other tab ## ## Other tab ##
new_gtkui_config["show_new_releases"] = \ new_gtkui_config["show_new_releases"] = \
self.glade.get_widget("chk_show_new_releases").get_active() self.builder.get_object("chk_show_new_releases").get_active()
new_core_config["send_info"] = \ new_core_config["send_info"] = \
self.glade.get_widget("chk_send_info").get_active() self.builder.get_object("chk_send_info").get_active()
new_core_config["geoip_db_location"] = \ new_core_config["geoip_db_location"] = \
self.glade.get_widget("entry_geoip").get_text() self.builder.get_object("entry_geoip").get_text()
## Daemon tab ## ## Daemon tab ##
new_core_config["daemon_port"] = \ new_core_config["daemon_port"] = \
self.glade.get_widget("spin_daemon_port").get_value_as_int() self.builder.get_object("spin_daemon_port").get_value_as_int()
new_core_config["allow_remote"] = \ new_core_config["allow_remote"] = \
self.glade.get_widget("chk_allow_remote_connections").get_active() self.builder.get_object("chk_allow_remote_connections").get_active()
new_core_config["new_release_check"] = \ new_core_config["new_release_check"] = \
self.glade.get_widget("chk_new_releases").get_active() self.builder.get_object("chk_new_releases").get_active()
## Proxy tab ## ## Proxy tab ##
new_core_config["proxies"] = {} new_core_config["proxies"] = {}
for t in ("peer", "web_seed", "tracker", "dht"): for t in ("peer", "web_seed", "tracker", "dht"):
new_core_config["proxies"][t] = {} new_core_config["proxies"][t] = {}
new_core_config["proxies"][t]["type"] = \ new_core_config["proxies"][t]["type"] = \
self.glade.get_widget("combo_proxy_type_%s" % t).get_active() self.builder.get_object("combo_proxy_type_%s" % t).get_active()
new_core_config["proxies"][t]["port"] = \ new_core_config["proxies"][t]["port"] = \
self.glade.get_widget("spin_proxy_port_%s" % t).get_value_as_int() self.builder.get_object("spin_proxy_port_%s" % t).get_value_as_int()
new_core_config["proxies"][t]["username"] = \ new_core_config["proxies"][t]["username"] = \
self.glade.get_widget("txt_proxy_username_%s" % t).get_text() self.builder.get_object("txt_proxy_username_%s" % t).get_text()
new_core_config["proxies"][t]["password"] = \ new_core_config["proxies"][t]["password"] = \
self.glade.get_widget("txt_proxy_password_%s" % t).get_text() self.builder.get_object("txt_proxy_password_%s" % t).get_text()
new_core_config["proxies"][t]["hostname"] = \ new_core_config["proxies"][t]["hostname"] = \
self.glade.get_widget("txt_proxy_server_%s" % t).get_text() self.builder.get_object("txt_proxy_server_%s" % t).get_text()
## Queue tab ## ## Queue tab ##
new_core_config["queue_new_to_top"] = \ new_core_config["queue_new_to_top"] = \
self.glade.get_widget("chk_queue_new_top").get_active() self.builder.get_object("chk_queue_new_top").get_active()
new_core_config["max_active_seeding"] = \ new_core_config["max_active_seeding"] = \
self.glade.get_widget("spin_seeding").get_value_as_int() self.builder.get_object("spin_seeding").get_value_as_int()
new_core_config["max_active_downloading"] = \ new_core_config["max_active_downloading"] = \
self.glade.get_widget("spin_downloading").get_value_as_int() self.builder.get_object("spin_downloading").get_value_as_int()
new_core_config["max_active_limit"] = \ new_core_config["max_active_limit"] = \
self.glade.get_widget("spin_active").get_value_as_int() self.builder.get_object("spin_active").get_value_as_int()
new_core_config["dont_count_slow_torrents"] = \ new_core_config["dont_count_slow_torrents"] = \
self.glade.get_widget("chk_dont_count_slow_torrents").get_active() self.builder.get_object("chk_dont_count_slow_torrents").get_active()
new_core_config["auto_manage_prefer_seeds"] = \ new_core_config["auto_manage_prefer_seeds"] = \
self.glade.get_widget("chk_auto_manage_prefer_seeds").get_active() self.builder.get_object("chk_auto_manage_prefer_seeds").get_active()
new_core_config["stop_seed_at_ratio"] = \ new_core_config["stop_seed_at_ratio"] = \
self.glade.get_widget("chk_seed_ratio").get_active() self.builder.get_object("chk_seed_ratio").get_active()
new_core_config["remove_seed_at_ratio"] = \ new_core_config["remove_seed_at_ratio"] = \
self.glade.get_widget("chk_remove_ratio").get_active() self.builder.get_object("chk_remove_ratio").get_active()
new_core_config["stop_seed_ratio"] = \ new_core_config["stop_seed_ratio"] = \
self.glade.get_widget("spin_share_ratio").get_value() self.builder.get_object("spin_share_ratio").get_value()
new_core_config["share_ratio_limit"] = \ new_core_config["share_ratio_limit"] = \
self.glade.get_widget("spin_share_ratio_limit").get_value() self.builder.get_object("spin_share_ratio_limit").get_value()
new_core_config["seed_time_ratio_limit"] = \ new_core_config["seed_time_ratio_limit"] = \
self.glade.get_widget("spin_seed_time_ratio_limit").get_value() self.builder.get_object("spin_seed_time_ratio_limit").get_value()
new_core_config["seed_time_limit"] = \ new_core_config["seed_time_limit"] = \
self.glade.get_widget("spin_seed_time_limit").get_value() self.builder.get_object("spin_seed_time_limit").get_value()
## Cache tab ## ## Cache tab ##
new_core_config["cache_size"] = \ new_core_config["cache_size"] = \
self.glade.get_widget("spin_cache_size").get_value_as_int() self.builder.get_object("spin_cache_size").get_value_as_int()
new_core_config["cache_expiry"] = \ new_core_config["cache_expiry"] = \
self.glade.get_widget("spin_cache_expiry").get_value_as_int() self.builder.get_object("spin_cache_expiry").get_value_as_int()
# Run plugin hook to apply preferences # Run plugin hook to apply preferences
component.get("PluginManager").run_on_apply_prefs() component.get("PluginManager").run_on_apply_prefs()
@ -840,7 +839,7 @@ class Preferences(component.Component):
if response == gtk.RESPONSE_NO: if response == gtk.RESPONSE_NO:
# Set each changed config value in the core # Set each changed config value in the core
self.gtkui_config["classic_mode"] = True self.gtkui_config["classic_mode"] = True
self.glade.get_widget("chk_classic_mode").set_active(True) self.builder.get_object("chk_classic_mode").set_active(True)
else: else:
client.disconnect() client.disconnect()
component.stop() component.stop()
@ -857,13 +856,16 @@ class Preferences(component.Component):
dialog.run() dialog.run()
def hide(self): def hide(self):
self.glade.get_widget("port_img").hide() self.builder.get_object("port_img").hide()
self.pref_dialog.hide() self.pref_dialog.hide()
def __update_cache_status(self): def __update_cache_status(self):
# Updates the cache status labels with the info in the dict # Updates the cache status labels with the info in the dict
for widget in self.glade.get_widget_prefix("label_cache_"): for widget_name in ('label_cache_blocks_written', 'label_cache_writes', 'label_cache_write_hit_ratio',
key = widget.get_name()[len("label_cache_"):] 'label_cache_blocks_read', 'label_cache_blocks_read_hit', 'label_cache_read_hit_ratio',
'label_cache_reads', 'label_cache_cache_size', 'label_cache_read_cache_size'):
widget = self.builder.get_object(widget_name)
key = widget_name[len("label_cache_"):]
value = self.cache_status[key] value = self.cache_status[key]
if type(value) == float: if type(value) == float:
value = "%.2f" % value value = "%.2f" % value
@ -924,14 +926,14 @@ class Preferences(component.Component):
def update_dependent_widgets(name, value): def update_dependent_widgets(name, value):
dependency = dependents[name] dependency = dependents[name]
for dep in dependency.keys(): for dep in dependency.keys():
depwidget = self.glade.get_widget(dep) depwidget = self.builder.get_object(dep)
sensitive = [not value, value][dependency[dep]] sensitive = [not value, value][dependency[dep]]
depwidget.set_sensitive(sensitive) depwidget.set_sensitive(sensitive)
if dep in dependents: if dep in dependents:
update_dependent_widgets(dep, depwidget.get_active() and sensitive) update_dependent_widgets(dep, depwidget.get_active() and sensitive)
for key in dependents.keys(): for key in dependents.keys():
if widget != self.glade.get_widget(key): if widget != self.builder.get_object(key):
continue continue
update_dependent_widgets(key, value) update_dependent_widgets(key, value)
@ -966,18 +968,18 @@ class Preferences(component.Component):
def on_get_test(status): def on_get_test(status):
if status: if status:
self.glade.get_widget("port_img").set_from_stock(gtk.STOCK_YES, 4) self.builder.get_object("port_img").set_from_stock(gtk.STOCK_YES, 4)
self.glade.get_widget("port_img").show() self.builder.get_object("port_img").show()
else: else:
self.glade.get_widget("port_img").set_from_stock(gtk.STOCK_DIALOG_WARNING, 4) self.builder.get_object("port_img").set_from_stock(gtk.STOCK_DIALOG_WARNING, 4)
self.glade.get_widget("port_img").show() self.builder.get_object("port_img").show()
client.core.test_listen_port().addCallback(on_get_test) client.core.test_listen_port().addCallback(on_get_test)
# XXX: Consider using gtk.Spinner() instead of the loading gif # XXX: Consider using gtk.Spinner() instead of the loading gif
# It requires gtk.ver > 2.12 # It requires gtk.ver > 2.12
self.glade.get_widget("port_img").set_from_file( self.builder.get_object("port_img").set_from_file(
deluge.common.get_pixmap('loading.gif') deluge.common.get_pixmap('loading.gif')
) )
self.glade.get_widget("port_img").show() self.builder.get_object("port_img").show()
client.force_call() client.force_call()
def on_plugin_toggled(self, renderer, path): def on_plugin_toggled(self, renderer, path):
@ -998,11 +1000,11 @@ class Preferences(component.Component):
return return
name = model[itr][0] name = model[itr][0]
plugin_info = component.get("PluginManager").get_plugin_info(name) plugin_info = component.get("PluginManager").get_plugin_info(name)
self.glade.get_widget("label_plugin_author").set_text(plugin_info["Author"]) self.builder.get_object("label_plugin_author").set_text(plugin_info["Author"])
self.glade.get_widget("label_plugin_version").set_text(plugin_info["Version"]) self.builder.get_object("label_plugin_version").set_text(plugin_info["Version"])
self.glade.get_widget("label_plugin_email").set_text(plugin_info["Author-email"]) self.builder.get_object("label_plugin_email").set_text(plugin_info["Author-email"])
self.glade.get_widget("label_plugin_homepage").set_text(plugin_info["Home-page"]) self.builder.get_object("label_plugin_homepage").set_text(plugin_info["Home-page"])
self.glade.get_widget("label_plugin_details").set_text(plugin_info["Description"]) self.builder.get_object("label_plugin_details").set_text(plugin_info["Description"])
def _on_button_plugin_install_clicked(self, widget): def _on_button_plugin_install_clicked(self, widget):
log.debug("_on_button_plugin_install_clicked") log.debug("_on_button_plugin_install_clicked")
@ -1077,12 +1079,12 @@ class Preferences(component.Component):
for h in hides: for h in hides:
for p in prefixes: for p in prefixes:
w = self.glade.get_widget(p + h + "_" + name) w = self.builder.get_object(p + h + "_" + name)
if w: if w:
w.hide() w.hide()
for s in shows: for s in shows:
for p in prefixes: for p in prefixes:
w = self.glade.get_widget(p + s + "_" + name) w = self.builder.get_object(p + s + "_" + name)
if w: if w:
w.show() w.show()
@ -1138,11 +1140,11 @@ class Preferences(component.Component):
return return
username = model[itr][0] username = model[itr][0]
if username: if username:
self.glade.get_widget("accounts_edit").set_sensitive(True) self.builder.get_object("accounts_edit").set_sensitive(True)
self.glade.get_widget("accounts_delete").set_sensitive(True) self.builder.get_object("accounts_delete").set_sensitive(True)
else: else:
self.glade.get_widget("accounts_edit").set_sensitive(False) self.builder.get_object("accounts_edit").set_sensitive(False)
self.glade.get_widget("accounts_delete").set_sensitive(False) self.builder.get_object("accounts_delete").set_sensitive(False)
def _on_accounts_add_clicked(self, widget): def _on_accounts_add_clicked(self, widget):
dialog = dialogs.AccountDialog( dialog = dialogs.AccountDialog(
@ -1256,13 +1258,13 @@ class Preferences(component.Component):
dialog.run().addCallback(dialog_finished) dialog.run().addCallback(dialog_finished)
def _on_alocation_toggled(self, widget): def _on_alocation_toggled(self, widget):
full_allocation_active = self.glade.get_widget("radio_full_allocation").get_active() full_allocation_active = self.builder.get_object("radio_full_allocation").get_active()
self.glade.get_widget("chk_prioritize_first_last_pieces").set_sensitive(full_allocation_active) self.builder.get_object("chk_prioritize_first_last_pieces").set_sensitive(full_allocation_active)
self.glade.get_widget("chk_sequential_download").set_sensitive(full_allocation_active) self.builder.get_object("chk_sequential_download").set_sensitive(full_allocation_active)
def _on_piecesbar_toggle_toggled(self, widget): def _on_piecesbar_toggle_toggled(self, widget):
self.gtkui_config['show_piecesbar'] = widget.get_active() self.gtkui_config['show_piecesbar'] = widget.get_active()
colors_widget = self.glade.get_widget("piecebar_colors_expander") colors_widget = self.builder.get_object("piecebar_colors_expander")
colors_widget.set_visible(widget.get_active()) colors_widget.set_visible(widget.get_active())
def _on_completed_color_set(self, widget): def _on_completed_color_set(self, widget):
@ -1294,9 +1296,9 @@ class Preferences(component.Component):
color = gtk.gdk.Color(*self.gtkui_config["pieces_color_%s" % state]) color = gtk.gdk.Color(*self.gtkui_config["pieces_color_%s" % state])
log.debug("Setting %r color state from config to %s", state, log.debug("Setting %r color state from config to %s", state,
(color.red, color.green, color.blue)) (color.red, color.green, color.blue))
self.glade.get_widget("%s_color" % state).set_color(color) self.builder.get_object("%s_color" % state).set_color(color)
else: else:
color = self.glade.get_widget("%s_color" % state).get_color() color = self.builder.get_object("%s_color" % state).get_color()
log.debug("Setting %r color state to %s", state, log.debug("Setting %r color state to %s", state,
(color.red, color.green, color.blue)) (color.red, color.green, color.blue))
self.gtkui_config["pieces_color_%s" % state] = [ self.gtkui_config["pieces_color_%s" % state] = [
@ -1305,14 +1307,14 @@ class Preferences(component.Component):
self.gtkui_config.save() self.gtkui_config.save()
self.gtkui_config.apply_set_functions("pieces_colors") self.gtkui_config.apply_set_functions("pieces_colors")
self.glade.get_widget("revert_color_%s" % state).set_sensitive( self.builder.get_object("revert_color_%s" % state).set_sensitive(
[color.red, color.green, color.blue] != self.COLOR_DEFAULTS[state] [color.red, color.green, color.blue] != self.COLOR_DEFAULTS[state]
) )
def __revert_color(self, state, from_config=False): def __revert_color(self, state, from_config=False):
log.debug("Reverting %r color state", state) log.debug("Reverting %r color state", state)
self.glade.get_widget("%s_color" % state).set_color( self.builder.get_object("%s_color" % state).set_color(
gtk.gdk.Color(*self.COLOR_DEFAULTS[state]) gtk.gdk.Color(*self.COLOR_DEFAULTS[state])
) )
self.glade.get_widget("revert_color_%s" % state).set_sensitive(False) self.builder.get_object("revert_color_%s" % state).set_sensitive(False)
self.gtkui_config.apply_set_functions("pieces_colors") self.gtkui_config.apply_set_functions("pieces_colors")