diff --git a/deluge/ui/gtkui/dialogs.py b/deluge/ui/gtkui/dialogs.py index 55d31c827..f1602ed57 100644 --- a/deluge/ui/gtkui/dialogs.py +++ b/deluge/ui/gtkui/dialogs.py @@ -54,7 +54,7 @@ class BaseDialog(gtk.Dialog): MainWindow """ super(BaseDialog, self).__init__( - title="", + title=header, parent=parent if parent else component.get("MainWindow").window, flags=gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT | gtk.DIALOG_NO_SEPARATOR, buttons=buttons) @@ -80,11 +80,6 @@ class BaseDialog(gtk.Dialog): image.set_alignment(0.5, 0.0) hbox.pack_start(image, False, False) vbox = gtk.VBox(spacing=5) - label = gtk.Label("" + header + "") - label.set_use_markup(True) - label.set_alignment(0.0, 0.5) - label.set_line_wrap(True) - vbox.pack_start(label, False, False) tlabel = gtk.Label(text) tlabel.set_use_markup(True) tlabel.set_line_wrap(True) diff --git a/deluge/ui/gtkui/glade/preferences_dialog.ui b/deluge/ui/gtkui/glade/preferences_dialog.ui index 54e302f44..db7bed001 100644 --- a/deluge/ui/gtkui/glade/preferences_dialog.ui +++ b/deluge/ui/gtkui/glade/preferences_dialog.ui @@ -416,7 +416,7 @@ True True False - The classic self-contained application + The standalone self-contained application True True @@ -520,19 +520,16 @@ True True False - Besides being experimental, using the pieces bar -will increase the bandwidth used between client -and daemon(does not apply in classic mode). -Use at your own risk if you wish to help us debug -this new feature. + The pieces bar +will increase bandwidth use between client +and daemon (does not apply in Standalone mode). True True False - Show a pieces bar in the torrent's -status tab (<b>EXPERIMENTAL!!!</b>) + Show a pieces bar in Status tab True @@ -4364,7 +4361,7 @@ Requires a Hex value. True True False - Hostnames should be attempted to be resolved through + Hostnames should be attempted to be resolved through the proxy instead of using the local DNS service True True diff --git a/deluge/ui/gtkui/gtkui.py b/deluge/ui/gtkui/gtkui.py index 974295a77..8199d674c 100644 --- a/deluge/ui/gtkui/gtkui.py +++ b/deluge/ui/gtkui/gtkui.py @@ -323,31 +323,34 @@ class GtkUI(object): self.mainwindow.first_show() if self.config["classic_mode"]: - def on_dialog_response(response): if response != gtk.RESPONSE_YES: - # The user does not want to turn Classic Mode off, so just quit + # The user does not want to turn Standalone Mode off, so just quit self.mainwindow.quit() return # Turning off classic_mode self.config["classic_mode"] = False self.__start_non_classic() + try: try: client.start_classic_mode() except deluge.error.DaemonRunningError: d = dialogs.YesNoDialog( - _("Turn off Classic Mode?"), - _("It appears that a Deluge daemon process (deluged) is already running.\n\n\ -You will either need to stop the daemon or turn off Classic Mode to continue.")).run() + _("Switch to Thin Client Mode?"), + _("A Deluge daemon process (deluged) is already running. " + "To use Standalone mode, stop this daemon and restart Deluge." + "\n\n" + "Continue in Thin Client mode?")).run() self.started_in_classic = False d.addCallback(on_dialog_response) except ImportError, e: if "No module named libtorrent" in e.message: d = dialogs.YesNoDialog( - _("Enable Thin Client Mode?"), - _("Thin client mode is only available because libtorrent is not installed.\n\n\ -To use Deluge standalone (Classic mode) please install libtorrent.")).run() + _("Switch to Thin Client Mode?"), + _("Only Thin Client mode is available because libtorrent is not installed." + "\n\n" + "To use Deluge Standalone mode, please install libtorrent.")).run() self.started_in_classic = False d.addCallback(on_dialog_response) else: @@ -360,13 +363,14 @@ To use Deluge standalone (Classic mode) please install libtorrent.")).run() tb = sys.exc_info() ed = dialogs.ErrorDialog( _("Error Starting Core"), - _("There was an error starting the core component which is required to run Deluge in Classic Mode.\n\n\ -Please see the details below for more information."), details=traceback.format_exc(tb[2])).run() + _("An error occurred starting the core component required to run Deluge in Standalone mode." + "\n\n" + "Please see the details below for more information."), details=traceback.format_exc(tb[2])).run() def on_ed_response(response): d = dialogs.YesNoDialog( - _("Turn off Classic Mode?"), - _("Since there was an error starting in Classic Mode would you like to continue by turning it off?") + _("Switch to Thin Client Mode?"), + _("Unable to start Standalone mode would you like to continue in Thin Client mode?") ).run() self.started_in_classic = False d.addCallback(on_dialog_response) diff --git a/deluge/ui/gtkui/menubar.py b/deluge/ui/gtkui/menubar.py index 6c219480a..2e93be709 100644 --- a/deluge/ui/gtkui/menubar.py +++ b/deluge/ui/gtkui/menubar.py @@ -1,39 +1,14 @@ -# -# menubar.py +# -*- coding: utf-8 -*- # # Copyright (C) 2007, 2008 Andrew Resch # Copyright (C) 2011 Pedro Algarvio # -# Deluge is free software. -# -# You may redistribute it and/or modify it under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 3 of the License, or (at your option) -# any later version. -# -# deluge is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with deluge. If not, write to: -# The Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor -# Boston, MA 02110-1301, USA. -# -# In addition, as a special exception, the copyright holders give -# permission to link the code of portions of this program with the OpenSSL -# library. -# You must obey the GNU General Public License in all respects for all of -# the code used other than OpenSSL. If you modify file(s) with this -# exception, you may extend this exception to your version of the file(s), -# but you are not obligated to do so. If you do not wish to do so, delete -# this exception statement from your version. If you delete this exception -# statement from all source files in the program, then also delete it here. -# +# This file is part of Deluge and is licensed under GNU General Public License 3.0, or later, with +# the additional special exception to link portions of this program with the OpenSSL library. +# See LICENSE for more details. # + import os.path import pygtk pygtk.require('2.0') @@ -179,8 +154,6 @@ class MenuBar(component.Component): "menuitem_addtorrent" ] - self.config.register_set_function("classic_mode", self._on_classic_mode) - client.register_event_handler("TorrentStateChangedEvent", self.on_torrentstatechanged_event) client.register_event_handler("TorrentResumedEvent", self.on_torrentresumed_event) client.register_event_handler("SessionPausedEvent", self.on_sessionpaused_event) @@ -204,9 +177,9 @@ class MenuBar(component.Component): self.builder.get_object(widget).hide() self.builder.get_object(widget).set_no_show_all(True) - if not self.config["classic_mode"]: - self.main_builder.get_object("separatormenuitem").show() - self.main_builder.get_object("menuitem_quitdaemon").show() + self.main_builder.get_object("separatormenuitem").set_visible(not self.config["classic_mode"]) + self.main_builder.get_object("menuitem_quitdaemon").set_visible(not self.config["classic_mode"]) + self.main_builder.get_object("menuitem_connectionmanager").set_visible(not self.config["classic_mode"]) # Show the Torrent menu because we're connected to a host self.menu_torrent.show() @@ -503,12 +476,6 @@ class MenuBar(component.Component): self.config["sidebar_show_trackers"] = widget.get_active() component.get("FilterTreeView").update() - def _on_classic_mode(self, key, value): - if value: - self.main_builder.get_object("menuitem_connectionmanager").hide() - else: - self.main_builder.get_object("menuitem_connectionmanager").show() - def _on_known_accounts(self, known_accounts): known_accounts_to_log = [] for account in known_accounts: diff --git a/deluge/ui/gtkui/preferences.py b/deluge/ui/gtkui/preferences.py index cc43488e9..98e39b64b 100644 --- a/deluge/ui/gtkui/preferences.py +++ b/deluge/ui/gtkui/preferences.py @@ -786,27 +786,22 @@ class Preferences(component.Component): # Re-show the dialog to make sure everything has been updated self.show() - if classic_mode_was_set and not new_gtkui_in_classic_mode: + if classic_mode_was_set != new_gtkui_in_classic_mode: def on_response(response): - if response == gtk.RESPONSE_NO: - # Set each changed config value in the core - self.gtkui_config["classic_mode"] = True - self.builder.get_object("radio_classic").set_active(True) + if response == gtk.RESPONSE_YES: + shutdown_daemon = (not client.is_classicmode() and + client.connected() and + client.is_localhost()) + component.get("MainWindow").quit(shutdown=shutdown_daemon) else: - client.disconnect() - component.stop() - self.builder.get_object("radio_thinclient").set_active(True) + self.gtkui_config["classic_mode"] = not new_gtkui_in_classic_mode + self.builder.get_object("radio_classic").set_active(self.gtkui_config["classic_mode"]) + self.builder.get_object("radio_thinclient").set_active(not self.gtkui_config["classic_mode"]) dialog = dialogs.YesNoDialog( - _("Attention"), - _("Your current session will be stopped. Continue?") + _("Switching client mode..."), + _("Your current session will be stopped. Do you wish to continue?") ) dialog.run().addCallback(on_response) - elif not classic_mode_was_set and new_gtkui_in_classic_mode: - dialog = dialogs.InformationDialog( - _("Attention"), - _("You must now restart the deluge UI") - ) - dialog.run() def hide(self): self.window_open = False diff --git a/deluge/ui/gtkui/toolbar.py b/deluge/ui/gtkui/toolbar.py index 625501d42..a9ddef872 100644 --- a/deluge/ui/gtkui/toolbar.py +++ b/deluge/ui/gtkui/toolbar.py @@ -1,51 +1,23 @@ +# -*- coding: utf-8 -*- # -# toolbar.py +# Copyright (C) 2007-2009 Andrew Resch # -# Copyright (C) 2007, 2008 Andrew Resch +# This file is part of Deluge and is licensed under GNU General Public License 3.0, or later, with +# the additional special exception to link portions of this program with the OpenSSL library. +# See LICENSE for more details. # -# Deluge is free software. -# -# You may redistribute it and/or modify it under the terms of the -# GNU General Public License, as published by the Free Software -# Foundation; either version 3 of the License, or (at your option) -# any later version. -# -# deluge is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with deluge. If not, write to: -# The Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor -# Boston, MA 02110-1301, USA. -# -# In addition, as a special exception, the copyright holders give -# permission to link the code of portions of this program with the OpenSSL -# library. -# You must obey the GNU General Public License in all respects for all of -# the code used other than OpenSSL. If you modify file(s) with this -# exception, you may extend this exception to your version of the file(s), -# but you are not obligated to do so. If you do not wish to do so, delete -# this exception statement from your version. If you delete this exception -# statement from all source files in the program, then also delete it here. -# -# - import pygtk pygtk.require('2.0') import gtk -import gobject import logging import deluge.component as component -from deluge.ui.client import client from deluge.configmanager import ConfigManager log = logging.getLogger(__name__) + class ToolBar(component.Component): def __init__(self): component.Component.__init__(self, "ToolBar") @@ -75,14 +47,12 @@ class ToolBar(component.Component): "find_menuitem" ] - self.config.register_set_function("classic_mode", self._on_classic_mode, True) - # Hide if necessary self.visible(self.config["show_toolbar"]) def start(self): - if not self.config["classic_mode"]: - self.window.get_builder().get_object("toolbutton_connectionmanager").show() + self.window.get_builder().get_object("toolbutton_connectionmanager").set_visible( + not self.config["classic_mode"]) for widget in self.change_sensitivity: self.window.get_builder().get_object(widget).set_sensitive(True) @@ -99,10 +69,8 @@ class ToolBar(component.Component): self.config["show_toolbar"] = visible - def add_toolbutton(self, callback, label=None, image=None, stock=None, - tooltip=None): + def add_toolbutton(self, callback, label=None, image=None, stock=None, tooltip=None): """Adds a toolbutton to the toolbar""" - # Create the button toolbutton = gtk.ToolButton() if stock is not None: toolbutton.set_stock_id(stock) @@ -110,16 +78,11 @@ class ToolBar(component.Component): toolbutton.set_label(label) if image is not None: toolbutton.set_icon_widget(image) - # Set the tooltip if tooltip is not None: toolbutton.set_tooltip_text(tooltip) - # Connect the 'clicked' event callback + toolbutton.connect("clicked", callback) - - # Append the button to the toolbar self.toolbar.insert(toolbutton, -1) - - # Show the new toolbutton toolbutton.show_all() return toolbutton @@ -130,7 +93,6 @@ class ToolBar(component.Component): if position is not None: self.toolbar.insert(sep, position) else: - # Append the separator self.toolbar.insert(sep, -1) sep.show() @@ -141,35 +103,30 @@ class ToolBar(component.Component): """Removes a widget from the toolbar""" self.toolbar.remove(widget) - ### Callbacks ### + ### Callbacks (Uses the menubar's callback) ### + def on_toolbutton_add_clicked(self, data): log.debug("on_toolbutton_add_clicked") - # Use the menubar's callback component.get("MenuBar").on_menuitem_addtorrent_activate(data) def on_toolbutton_remove_clicked(self, data): log.debug("on_toolbutton_remove_clicked") - # Use the menubar's callbacks component.get("MenuBar").on_menuitem_remove_activate(data) def on_toolbutton_pause_clicked(self, data): log.debug("on_toolbutton_pause_clicked") - # Use the menubar's callbacks component.get("MenuBar").on_menuitem_pause_activate(data) def on_toolbutton_resume_clicked(self, data): log.debug("on_toolbutton_resume_clicked") - # Use the menubar's calbacks component.get("MenuBar").on_menuitem_resume_activate(data) def on_toolbutton_preferences_clicked(self, data): log.debug("on_toolbutton_preferences_clicked") - # Use the menubar's callbacks component.get("MenuBar").on_menuitem_preferences_activate(data) def on_toolbutton_connectionmanager_clicked(self, data): log.debug("on_toolbutton_connectionmanager_clicked") - # Use the menubar's callbacks component.get("MenuBar").on_menuitem_connectionmanager_activate(data) def on_toolbutton_queue_up_clicked(self, data): @@ -179,10 +136,3 @@ class ToolBar(component.Component): def on_toolbutton_queue_down_clicked(self, data): log.debug("on_toolbutton_queue_down_clicked") component.get("MenuBar").on_menuitem_queue_down_activate(data) - - def _on_classic_mode(self, key, value): - w = self.window.get_builder().get_object("toolbutton_connectionmanager") - if value: - w.hide() - else: - w.show()