diff --git a/deluge/ui/gtkui/common.py b/deluge/ui/gtkui/common.py
index dd7153a15..538c1e537 100644
--- a/deluge/ui/gtkui/common.py
+++ b/deluge/ui/gtkui/common.py
@@ -115,26 +115,60 @@ def build_menu_radio_list(value_list, callback, pref_value=None,
return menu
-def show_other_dialog(string, default=None):
- """Shows a dialog to get an 'other' speed and return the value"""
- dialog_glade = gtk.glade.XML(
+def show_other_dialog(header, type_str, image_stockid=None, image_filename=None, default=0):
+ """
+ Shows a dialog with :param:`header` as the header text and :param:`type_str`
+ as the type text. The type of spinbutton (int or float) is determined by
+ :param:`default`s type.
+
+ :param header: str, the header label text
+ :param type_str: str, the type label text, what comes after the spinbutton
+ :param image_stockid: gtkStockId, the stock id of the image in the header
+ :param image_filename: str, filename of icon in pixmaps folder
+ :param default: the default value in the spinbutton
+
+ :returns: None, int or float from spinbutton depending on :param:`default`.
+ None is returned if the user clicks on Cancel.
+ :rtype: None, int or float
+
+ :raises TypeError: if :param:`default` is not of type int or float
+
+ """
+ if type(default) != int and type(default) != float:
+ raise TypeError("default value needs to be an int or float")
+
+ glade = gtk.glade.XML(
pkg_resources.resource_filename("deluge.ui.gtkui",
"glade/dgtkpopups.glade"))
- speed_dialog = dialog_glade.get_widget("speed_dialog")
- spin_title = dialog_glade.get_widget("spin_title")
- spin_title.set_text(_("%s" % string))
- spin_speed = dialog_glade.get_widget("spin_speed")
- if default != None:
- spin_speed.set_value(default)
- spin_speed.select_region(0, -1)
- response = speed_dialog.run()
- if response == 1: # OK Response
- value = spin_speed.get_value()
- else:
- speed_dialog.destroy()
- return None
+ dialog = glade.get_widget("other_dialog")
+ dialog.set_transient_for(component.get("MainWindow").window)
+ dialog.set_title("")
+ glade.get_widget("label_header").set_markup("" + header + "")
+ glade.get_widget("label_type").set_text(type_str)
+ if image_stockid:
+ glade.get_widget("image").set_from_stock(image_stockid, gtk.ICON_SIZE_LARGE_TOOLBAR)
+ if image_filename:
+ pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(
+ deluge.common.get_pixmap(image_filename), 32, 32)
+ glade.get_widget("image").set_from_pixbuf(pixbuf)
- speed_dialog.destroy()
+ spinbutton = glade.get_widget("spinbutton")
+ if type(default) == float:
+ spinbutton.set_digits(1)
+
+ # Set default value and select text
+ spinbutton.set_value(default)
+ spinbutton.select_region(0, -1)
+
+ value = None
+ response = dialog.run()
+ if response == gtk.RESPONSE_OK:
+ if type(default) == int:
+ value = spinbutton.get_value_as_int()
+ else:
+ value = spinbutton.get_value()
+
+ dialog.destroy()
return value
def add_peer_dialog():
diff --git a/deluge/ui/gtkui/glade/dgtkpopups.glade b/deluge/ui/gtkui/glade/dgtkpopups.glade
index 8853b664e..78e4a48ff 100644
--- a/deluge/ui/gtkui/glade/dgtkpopups.glade
+++ b/deluge/ui/gtkui/glade/dgtkpopups.glade
@@ -1,51 +1,41 @@
-
+
-
+
True
GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
5
- Speed
+ True
GTK_WIN_POS_MOUSE
True
- GDK_WINDOW_TYPE_HINT_NORMAL
+ GDK_WINDOW_TYPE_HINT_DIALOG
True
True
- False
- False
True
GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
- 2
+ 5
-
+
True
- GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
10
-
+
True
- GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
False
+ False
-
+
False
@@ -55,10 +45,69 @@
+ False
False
1
+
+
+
+
+ False
+ 2
+
+
+
+
+ True
+ 5
+
+
+ True
+
+
+
+
+
+
+
+ True
+ 1
+
+
+ True
+ True
+ 6
+ True
+ 6
+ 1
+ -1 -1 99999 1 10 0
+
+
+
+
+ False
+ 1
+
+
+
+
+ True
+ 0
+ label
+
+
+ 2
+
+
+
+
+ False
+ False
+ 4
+
+
True
@@ -72,18 +121,20 @@
GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
gtk-cancel
True
- 0
+ -6
True
True
+ True
+ True
True
GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
gtk-ok
True
- 1
+ -5
1
diff --git a/deluge/ui/gtkui/menubar.py b/deluge/ui/gtkui/menubar.py
index 89eb24dd9..b0972936b 100644
--- a/deluge/ui/gtkui/menubar.py
+++ b/deluge/ui/gtkui/menubar.py
@@ -402,34 +402,17 @@ class MenuBar(component.Component):
"menuitem_max_connections": client.set_torrent_max_connections,
"menuitem_upload_slots": client.set_torrent_max_upload_slots
}
- dialog_glade = gtk.glade.XML(
- pkg_resources.resource_filename("deluge.ui.gtkui",
- "glade/dgtkpopups.glade"))
- speed_dialog = dialog_glade.get_widget("speed_dialog")
- spin_title = dialog_glade.get_widget("spin_title")
- if widget.name == "menuitem_down_speed":
- spin_title.set_text(_("Set Max Download Speed (KiB/s):"))
- elif widget.name == "menuitem_up_speed":
- spin_title.set_text(_("Set Max Upload Speed (KiB/s):"))
- elif widget.name == "menuitem_max_connections":
- spin_title.set_text(_("Set Max Connections:"))
- elif widget.name == "menuitem_upload_slots":
- spin_title.set_text(_("Set Max Upload Slots:"))
+ # widget: (header, type_str, image_stockid, image_filename, default)
+ other_dialog_info = {
+ "menuitem_down_speed": (_("Set Maximum Download Speed"), "KiB/s", None, "downloading.svg", -1.0),
+ "menuitem_up_speed": (_("Set Maximum Upload Speed"), "KiB/s", None, "seeding.svg", -1.0),
+ "menuitem_max_connections": (_("Set Maximum Connections"), "", gtk.STOCK_NETWORK, None, -1),
+ "menuitem_upload_slots": (_("Set Maximum Upload Slots"), "", gtk.STOCK_SORT_ASCENDING, None, -1)
+ }
- spin_speed = dialog_glade.get_widget("spin_speed")
- spin_speed.set_value(-1)
- spin_speed.select_region(0, -1)
- response = speed_dialog.run()
- if response == 1: # OK Response
- if widget.name == "menuitem_down_speed" or widget.name == "menuitem_up_speed":
- value = spin_speed.get_value()
- else:
- value = spin_speed.get_value_as_int()
- else:
- speed_dialog.destroy()
- return
- speed_dialog.destroy()
- if widget.name in funcs.keys():
+ # Show the other dialog
+ value = common.show_other_dialog(*other_dialog_info[widget.name])
+ if value and widget.name in funcs:
for torrent in component.get("TorrentView").get_selected_torrents():
funcs[widget.name](torrent, value)
diff --git a/deluge/ui/gtkui/statusbar.py b/deluge/ui/gtkui/statusbar.py
index 0f07b30b6..0054a269b 100644
--- a/deluge/ui/gtkui/statusbar.py
+++ b/deluge/ui/gtkui/statusbar.py
@@ -367,7 +367,7 @@ class StatusBar(component.Component):
value = -1
elif widget.get_name() == _("Other..."):
value = common.show_other_dialog(
- _("Download Speed (KiB/s):"), self.max_download_speed)
+ _("Set Maximum Download Speed"), "KiB/s", None, "downloading.svg", self.max_download_speed)
if value == None:
return
else:
@@ -395,7 +395,7 @@ class StatusBar(component.Component):
value = -1
elif widget.get_name() == _("Other..."):
value = common.show_other_dialog(
- _("Upload Speed (KiB/s):"), self.max_upload_speed)
+ _("Set Maximum Upload Speed"), "KiB/s", None, "seeding.svg", self.max_upload_speed)
if value == None:
return
else:
@@ -422,7 +422,7 @@ class StatusBar(component.Component):
value = -1
elif widget.get_name() == _("Other..."):
value = common.show_other_dialog(
- _("Connection Limit:"), self.max_connections)
+ _("Set Maximum Connections"), "", gtk.STOCK_NETWORK, None, self.max_connections)
if value == None:
return
else:
diff --git a/deluge/ui/gtkui/systemtray.py b/deluge/ui/gtkui/systemtray.py
index 83768ea05..cd2ed85e1 100644
--- a/deluge/ui/gtkui/systemtray.py
+++ b/deluge/ui/gtkui/systemtray.py
@@ -321,29 +321,26 @@ class SystemTray(component.Component):
self.window.quit()
def tray_setbwdown(self, widget, data=None):
- self.setbwlimit(widget, _("Download"), "max_download_speed",
- "tray_download_speed_list", self.max_download_speed)
+ self.setbwlimit(widget, _("Set Maximum Download Speed"), "max_download_speed",
+ "tray_download_speed_list", self.max_download_speed, "downloading.svg")
def tray_setbwup(self, widget, data=None):
- self.setbwlimit(widget, _("Upload"), "max_upload_speed",
- "tray_upload_speed_list", self.max_upload_speed)
+ self.setbwlimit(widget, _("Set Maximum Upload Speed"), "max_upload_speed",
+ "tray_upload_speed_list", self.max_upload_speed, "seeding.svg")
- def setbwlimit(self, widget, string, core_key, ui_key, default):
+ def setbwlimit(self, widget, string, core_key, ui_key, default, image):
"""Sets the bandwidth limit based on the user selection."""
value = widget.get_children()[0].get_text().rstrip(" " + _("KiB/s"))
if value == _("Unlimited"):
value = -1
if value == _("Other..."):
- value = common.show_other_dialog(
- string + " Speed (KiB/s):", default)
+ value = common.show_other_dialog(string, "KiB/s", None, image, default)
if value == None:
return
# Set the config in the core
- value = float(value)
- config_to_set = {core_key: value}
- client.set_config(config_to_set)
+ client.set_config({core_key: value})
self.build_tray_bwsetsubmenu()