From 0954c3f112fe824f1028cc0ee33d65f7b7b8bc76 Mon Sep 17 00:00:00 2001 From: Andrew Resch Date: Thu, 27 Nov 2008 04:24:30 +0000 Subject: [PATCH] Re-do the 'set maximum' dialogs.. They are now decorated. --- deluge/ui/gtkui/common.py | 68 +++++++++++++----- deluge/ui/gtkui/glade/dgtkpopups.glade | 99 +++++++++++++++++++------- deluge/ui/gtkui/menubar.py | 37 +++------- deluge/ui/gtkui/statusbar.py | 6 +- deluge/ui/gtkui/systemtray.py | 17 ++--- 5 files changed, 146 insertions(+), 81 deletions(-) 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 - + True - True - True - True - True - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - True - 1 - 0 -1 10000 1 10 10 - True + 0 + label + True 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()