mirror of
https://github.com/codex-storage/deluge.git
synced 2025-02-11 10:56:39 +00:00
Add pop-up menus to the statusbar items.
This commit is contained in:
parent
bed05c7a05
commit
74cd111513
@ -139,6 +139,101 @@ def open_url_in_browser(url):
|
|||||||
import gobject
|
import gobject
|
||||||
gobject.idle_add(start_browser)
|
gobject.idle_add(start_browser)
|
||||||
|
|
||||||
|
|
||||||
|
def build_menu_radio_list(value_list, callback, pref_value=None,
|
||||||
|
suffix=None, show_notset=False, notset_label=None, notset_lessthan=0,
|
||||||
|
show_other=False, show_activated=False, activated_label=None):
|
||||||
|
# Build a menu with radio menu items from a list and connect them to
|
||||||
|
# the callback. The pref_value is what you would like to test for the
|
||||||
|
# default active radio item.
|
||||||
|
import gtk
|
||||||
|
if notset_label is None:
|
||||||
|
notset_label = _("Unlimited")
|
||||||
|
|
||||||
|
if activated_label is None:
|
||||||
|
activated_label = _("Activated")
|
||||||
|
|
||||||
|
menu = gtk.Menu()
|
||||||
|
group = None
|
||||||
|
if show_activated is False:
|
||||||
|
if pref_value > -1 and pref_value not in value_list:
|
||||||
|
value_list.pop()
|
||||||
|
value_list.append(pref_value)
|
||||||
|
|
||||||
|
for value in sorted(value_list):
|
||||||
|
if suffix != None:
|
||||||
|
menuitem = gtk.RadioMenuItem(group, str(value) + " " + \
|
||||||
|
suffix)
|
||||||
|
else:
|
||||||
|
menuitem = gtk.RadioMenuItem(group, str(value))
|
||||||
|
|
||||||
|
group = menuitem
|
||||||
|
|
||||||
|
if value == pref_value and pref_value != None:
|
||||||
|
menuitem.set_active(True)
|
||||||
|
|
||||||
|
if callback != None:
|
||||||
|
menuitem.connect("toggled", callback)
|
||||||
|
|
||||||
|
menu.append(menuitem)
|
||||||
|
|
||||||
|
if show_activated is True:
|
||||||
|
for value in sorted(value_list):
|
||||||
|
menuitem = gtk.RadioMenuItem(group, str(activated_label))
|
||||||
|
|
||||||
|
group = menuitem
|
||||||
|
|
||||||
|
if value == pref_value and pref_value != None:
|
||||||
|
menuitem.set_active(True)
|
||||||
|
|
||||||
|
if callback != None:
|
||||||
|
menuitem.connect("toggled", callback)
|
||||||
|
|
||||||
|
menu.append(menuitem)
|
||||||
|
|
||||||
|
if show_notset:
|
||||||
|
menuitem = gtk.RadioMenuItem(group, notset_label)
|
||||||
|
if pref_value < notset_lessthan and pref_value != None:
|
||||||
|
menuitem.set_active(True)
|
||||||
|
if show_activated and pref_value == 1:
|
||||||
|
menuitem.set_active(True)
|
||||||
|
menuitem.connect("toggled", callback)
|
||||||
|
menu.append(menuitem)
|
||||||
|
|
||||||
|
# Add the Other... menuitem
|
||||||
|
if show_other is True:
|
||||||
|
menuitem = gtk.SeparatorMenuItem()
|
||||||
|
menu.append(menuitem)
|
||||||
|
menuitem = gtk.MenuItem(_("Other..."))
|
||||||
|
menuitem.connect("activate", callback)
|
||||||
|
menu.append(menuitem)
|
||||||
|
|
||||||
|
return menu
|
||||||
|
|
||||||
|
def show_other_dialog(string, default=None):
|
||||||
|
"""Shows a dialog to get an 'other' speed and return the value"""
|
||||||
|
import gtk
|
||||||
|
import gtk.glade
|
||||||
|
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")
|
||||||
|
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
|
||||||
|
|
||||||
|
speed_dialog.destroy()
|
||||||
|
return value
|
||||||
|
|
||||||
## Formatting text functions
|
## Formatting text functions
|
||||||
|
|
||||||
def fsize(fsize_b):
|
def fsize(fsize_b):
|
||||||
|
@ -86,6 +86,7 @@ DEFAULT_PREFS = {
|
|||||||
"window_pane_position": -1,
|
"window_pane_position": -1,
|
||||||
"tray_download_speed_list" : [5.0, 10.0, 30.0, 80.0, 300.0],
|
"tray_download_speed_list" : [5.0, 10.0, 30.0, 80.0, 300.0],
|
||||||
"tray_upload_speed_list" : [5.0, 10.0, 30.0, 80.0, 300.0],
|
"tray_upload_speed_list" : [5.0, 10.0, 30.0, 80.0, 300.0],
|
||||||
|
"connection_limit_list": [50, 100, 200, 300, 500],
|
||||||
"enabled_plugins": [],
|
"enabled_plugins": [],
|
||||||
"show_connection_manager_on_start": True,
|
"show_connection_manager_on_start": True,
|
||||||
"autoconnect": False,
|
"autoconnect": False,
|
||||||
|
@ -35,6 +35,7 @@ import gtk
|
|||||||
|
|
||||||
import deluge.component as component
|
import deluge.component as component
|
||||||
import deluge.common
|
import deluge.common
|
||||||
|
from deluge.configmanager import ConfigManager
|
||||||
from deluge.ui.client import aclient as client
|
from deluge.ui.client import aclient as client
|
||||||
from deluge.log import LOG as log
|
from deluge.log import LOG as log
|
||||||
|
|
||||||
@ -96,6 +97,7 @@ class StatusBar(component.Component):
|
|||||||
component.Component.__init__(self, "StatusBar", interval=3000)
|
component.Component.__init__(self, "StatusBar", interval=3000)
|
||||||
self.window = component.get("MainWindow")
|
self.window = component.get("MainWindow")
|
||||||
self.statusbar = self.window.main_glade.get_widget("statusbar")
|
self.statusbar = self.window.main_glade.get_widget("statusbar")
|
||||||
|
self.config = ConfigManager("gtkui.conf")
|
||||||
|
|
||||||
# Status variables that are updated via callback
|
# Status variables that are updated via callback
|
||||||
self.max_connections = -1
|
self.max_connections = -1
|
||||||
@ -130,15 +132,18 @@ class StatusBar(component.Component):
|
|||||||
# Add in images and labels
|
# Add in images and labels
|
||||||
self.remove_item(self.not_connected_item)
|
self.remove_item(self.not_connected_item)
|
||||||
self.connections_item = StatusBarItem(
|
self.connections_item = StatusBarItem(
|
||||||
stock=gtk.STOCK_NETWORK)
|
stock=gtk.STOCK_NETWORK,
|
||||||
|
callback=self._on_connection_item_clicked)
|
||||||
self.hbox.pack_start(
|
self.hbox.pack_start(
|
||||||
self.connections_item.get_eventbox(), expand=False, fill=False)
|
self.connections_item.get_eventbox(), expand=False, fill=False)
|
||||||
self.download_item = StatusBarItem(
|
self.download_item = StatusBarItem(
|
||||||
image=deluge.common.get_pixmap("downloading16.png"))
|
image=deluge.common.get_pixmap("downloading16.png"),
|
||||||
|
callback=self._on_download_item_clicked)
|
||||||
self.hbox.pack_start(
|
self.hbox.pack_start(
|
||||||
self.download_item.get_eventbox(), expand=False, fill=False)
|
self.download_item.get_eventbox(), expand=False, fill=False)
|
||||||
self.upload_item = StatusBarItem(
|
self.upload_item = StatusBarItem(
|
||||||
image=deluge.common.get_pixmap("seeding16.png"))
|
image=deluge.common.get_pixmap("seeding16.png"),
|
||||||
|
callback=self._on_upload_item_clicked)
|
||||||
self.hbox.pack_start(
|
self.hbox.pack_start(
|
||||||
self.upload_item.get_eventbox(), expand=False, fill=False)
|
self.upload_item.get_eventbox(), expand=False, fill=False)
|
||||||
self.dht_item = StatusBarItem(
|
self.dht_item = StatusBarItem(
|
||||||
@ -280,3 +285,90 @@ class StatusBar(component.Component):
|
|||||||
def update(self):
|
def update(self):
|
||||||
# Send status request
|
# Send status request
|
||||||
self.send_status_request()
|
self.send_status_request()
|
||||||
|
|
||||||
|
def _on_download_item_clicked(self, widget, event):
|
||||||
|
menu = deluge.common.build_menu_radio_list(
|
||||||
|
self.config["tray_download_speed_list"],
|
||||||
|
self._on_set_download_speed,
|
||||||
|
self.max_download_speed,
|
||||||
|
_("KiB/s"), show_notset=True, show_other=True)
|
||||||
|
menu.show_all()
|
||||||
|
menu.popup(None, None, None, event.button, event.time)
|
||||||
|
|
||||||
|
def _on_set_download_speed(self, widget):
|
||||||
|
log.debug("_on_set_download_speed")
|
||||||
|
value = widget.get_children()[0].get_text().split(" ")[0]
|
||||||
|
log.debug("value: %s", value)
|
||||||
|
if value == "Unlimited":
|
||||||
|
value = -1
|
||||||
|
|
||||||
|
if value == _("Other..."):
|
||||||
|
value = deluge.common.show_other_speed_dialog(
|
||||||
|
_("Download Speed (KiB/s):"), self.max_download_speed)
|
||||||
|
if value == None:
|
||||||
|
return
|
||||||
|
|
||||||
|
# Set the config in the core
|
||||||
|
value = float(value)
|
||||||
|
|
||||||
|
if value != self.max_download_speed:
|
||||||
|
client.set_config({"max_download_speed": value})
|
||||||
|
|
||||||
|
def _on_upload_item_clicked(self, widget, event):
|
||||||
|
menu = deluge.common.build_menu_radio_list(
|
||||||
|
self.config["tray_upload_speed_list"],
|
||||||
|
self._on_set_upload_speed,
|
||||||
|
self.max_upload_speed,
|
||||||
|
_("KiB/s"), show_notset=True, show_other=True)
|
||||||
|
menu.show_all()
|
||||||
|
menu.popup(None, None, None, event.button, event.time)
|
||||||
|
|
||||||
|
def _on_set_upload_speed(self, widget):
|
||||||
|
log.debug("_on_set_upload_speed")
|
||||||
|
value = widget.get_children()[0].get_text().split(" ")[0]
|
||||||
|
log.debug("value: %s", value)
|
||||||
|
|
||||||
|
if value == "Unlimited":
|
||||||
|
value = -1
|
||||||
|
|
||||||
|
if value == _("Other..."):
|
||||||
|
value = deluge.common.show_other_speed_dialog(
|
||||||
|
_("Upload Speed (KiB/s):"), self.max_upload_speed)
|
||||||
|
if value == None:
|
||||||
|
return
|
||||||
|
|
||||||
|
# Set the config in the core
|
||||||
|
value = float(value)
|
||||||
|
|
||||||
|
if value != self.max_upload_speed:
|
||||||
|
client.set_config({"max_upload_speed": value})
|
||||||
|
|
||||||
|
def _on_connection_item_clicked(self, widget, event):
|
||||||
|
menu = deluge.common.build_menu_radio_list(
|
||||||
|
self.config["connection_limit_list"],
|
||||||
|
self._on_set_connection_limit,
|
||||||
|
self.max_connections, show_notset=True, show_other=True)
|
||||||
|
menu.show_all()
|
||||||
|
menu.popup(None, None, None, event.button, event.time)
|
||||||
|
|
||||||
|
def _on_set_connection_limit(self, widget):
|
||||||
|
log.debug("_on_set_connection_limit")
|
||||||
|
value = widget.get_children()[0].get_text().split(" ")[0]
|
||||||
|
log.debug("value: %s", value)
|
||||||
|
|
||||||
|
if value == "Unlimited":
|
||||||
|
value = -1
|
||||||
|
|
||||||
|
if value == _("Other..."):
|
||||||
|
value = deluge.common.show_other_dialog(
|
||||||
|
_("Connection Limit:"), self.max_connections)
|
||||||
|
if value == None:
|
||||||
|
return
|
||||||
|
|
||||||
|
# Set the config in the core
|
||||||
|
value = int(value)
|
||||||
|
|
||||||
|
if value != self.max_connections:
|
||||||
|
client.set_config({"max_connections_global": value})
|
||||||
|
|
||||||
|
|
||||||
|
@ -191,13 +191,13 @@ class SystemTray(component.Component):
|
|||||||
|
|
||||||
def build_tray_bwsetsubmenu(self):
|
def build_tray_bwsetsubmenu(self):
|
||||||
# Create the Download speed list sub-menu
|
# Create the Download speed list sub-menu
|
||||||
submenu_bwdownset = self.build_menu_radio_list(
|
submenu_bwdownset = deluge.common.build_menu_radio_list(
|
||||||
self.config["tray_download_speed_list"], self.tray_setbwdown,
|
self.config["tray_download_speed_list"], self.tray_setbwdown,
|
||||||
self.max_download_speed,
|
self.max_download_speed,
|
||||||
_("KiB/s"), show_notset=True, show_other=True)
|
_("KiB/s"), show_notset=True, show_other=True)
|
||||||
|
|
||||||
# Create the Upload speed list sub-menu
|
# Create the Upload speed list sub-menu
|
||||||
submenu_bwupset = self.build_menu_radio_list(
|
submenu_bwupset = deluge.common.build_menu_radio_list(
|
||||||
self.config["tray_upload_speed_list"], self.tray_setbwup,
|
self.config["tray_upload_speed_list"], self.tray_setbwup,
|
||||||
self.max_upload_speed,
|
self.max_upload_speed,
|
||||||
_("KiB/s"), show_notset=True, show_other=True)
|
_("KiB/s"), show_notset=True, show_other=True)
|
||||||
@ -298,121 +298,32 @@ class SystemTray(component.Component):
|
|||||||
self.window.quit()
|
self.window.quit()
|
||||||
client.shutdown()
|
client.shutdown()
|
||||||
|
|
||||||
def build_menu_radio_list(self, value_list, callback, pref_value=None,
|
|
||||||
suffix=None, show_notset=False, notset_label=None, notset_lessthan=0,
|
|
||||||
show_other=False, show_activated=False, activated_label=None):
|
|
||||||
# Build a menu with radio menu items from a list and connect them to
|
|
||||||
# the callback. The pref_value is what you would like to test for the
|
|
||||||
# default active radio item.
|
|
||||||
if notset_label is None:
|
|
||||||
notset_label = _("Unlimited")
|
|
||||||
|
|
||||||
if activated_label is None:
|
|
||||||
activated_label = _("Activated")
|
|
||||||
|
|
||||||
menu = gtk.Menu()
|
|
||||||
group = None
|
|
||||||
if show_activated is False:
|
|
||||||
if pref_value > -1 and pref_value not in value_list:
|
|
||||||
value_list.pop()
|
|
||||||
value_list.append(pref_value)
|
|
||||||
|
|
||||||
for value in sorted(value_list):
|
|
||||||
if suffix != None:
|
|
||||||
menuitem = gtk.RadioMenuItem(group, str(value) + " " + \
|
|
||||||
suffix)
|
|
||||||
else:
|
|
||||||
menuitem = gtk.RadioMenuItem(group, str(value))
|
|
||||||
|
|
||||||
group = menuitem
|
|
||||||
|
|
||||||
if value == pref_value and pref_value != None:
|
|
||||||
menuitem.set_active(True)
|
|
||||||
|
|
||||||
if callback != None:
|
|
||||||
menuitem.connect("toggled", callback)
|
|
||||||
|
|
||||||
menu.append(menuitem)
|
|
||||||
|
|
||||||
if show_activated is True:
|
|
||||||
for value in sorted(value_list):
|
|
||||||
menuitem = gtk.RadioMenuItem(group, str(activated_label))
|
|
||||||
|
|
||||||
group = menuitem
|
|
||||||
|
|
||||||
if value == pref_value and pref_value != None:
|
|
||||||
menuitem.set_active(True)
|
|
||||||
|
|
||||||
if callback != None:
|
|
||||||
menuitem.connect("toggled", callback)
|
|
||||||
|
|
||||||
menu.append(menuitem)
|
|
||||||
|
|
||||||
if show_notset:
|
|
||||||
menuitem = gtk.RadioMenuItem(group, notset_label)
|
|
||||||
if pref_value < notset_lessthan and pref_value != None:
|
|
||||||
menuitem.set_active(True)
|
|
||||||
if show_activated and pref_value == 1:
|
|
||||||
menuitem.set_active(True)
|
|
||||||
menuitem.connect("toggled", callback)
|
|
||||||
menu.append(menuitem)
|
|
||||||
|
|
||||||
# Add the Other... menuitem
|
|
||||||
if show_other is True:
|
|
||||||
menuitem = gtk.SeparatorMenuItem()
|
|
||||||
menu.append(menuitem)
|
|
||||||
menuitem = gtk.MenuItem(_("Other..."))
|
|
||||||
menuitem.connect("activate", callback)
|
|
||||||
menu.append(menuitem)
|
|
||||||
|
|
||||||
return menu
|
|
||||||
|
|
||||||
def tray_setbwdown(self, widget, data=None):
|
def tray_setbwdown(self, widget, data=None):
|
||||||
self.setbwlimit(widget, _("Download"), "max_download_speed",
|
self.setbwlimit(widget, _("Download"), "max_download_speed",
|
||||||
"tray_download_speed_list")
|
"tray_download_speed_list", self.max_download_speed)
|
||||||
|
|
||||||
def tray_setbwup(self, widget, data=None):
|
def tray_setbwup(self, widget, data=None):
|
||||||
self.setbwlimit(widget, _("Upload"), "max_upload_speed",
|
self.setbwlimit(widget, _("Upload"), "max_upload_speed",
|
||||||
"tray_upload_speed_list")
|
"tray_upload_speed_list", self.max_upload_speed)
|
||||||
|
|
||||||
def setbwlimit(self, widget, string, core_key, ui_key):
|
def setbwlimit(self, widget, string, core_key, ui_key, default):
|
||||||
"""Sets the bandwidth limit based on the user selection."""
|
"""Sets the bandwidth limit based on the user selection."""
|
||||||
value = widget.get_children()[0].get_text().rstrip(" " +
|
value = widget.get_children()[0].get_text().rstrip(" " + _("KiB/s"))
|
||||||
_("KiB/s"))
|
|
||||||
if value == _("Unlimited"):
|
if value == _("Unlimited"):
|
||||||
value = -1
|
value = -1
|
||||||
|
|
||||||
if value == _("Other..."):
|
if value == _("Other..."):
|
||||||
dialog_glade = gtk.glade.XML(
|
value = deluge.common.show_other_speed_dialog(
|
||||||
pkg_resources.resource_filename("deluge.ui.gtkui",
|
string + " Speed (KiB/s):", default)
|
||||||
"glade/dgtkpopups.glade"))
|
if value == None:
|
||||||
speed_dialog = dialog_glade.get_widget("speed_dialog")
|
|
||||||
spin_title = dialog_glade.get_widget("spin_title")
|
|
||||||
spin_title.set_text(_("%s Speed (KiB/s):" % string))
|
|
||||||
spin_speed = dialog_glade.get_widget("spin_speed")
|
|
||||||
spin_speed.set_value(
|
|
||||||
client.get_config_value(core_key))
|
|
||||||
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
|
return
|
||||||
speed_dialog.destroy()
|
|
||||||
|
|
||||||
# Set the config in the core
|
# Set the config in the core
|
||||||
value = float(value)
|
value = float(value)
|
||||||
config_to_set = {core_key: value}
|
config_to_set = {core_key: value}
|
||||||
client.set_config(config_to_set)
|
client.set_config(config_to_set)
|
||||||
|
|
||||||
# Update the tray speed limit list
|
self.build_tray_bwsetsubmenu()
|
||||||
if value not in self.config[ui_key] and value >= 0:
|
|
||||||
# We prepend this value and remove the last value in the list
|
|
||||||
self.config[ui_key].insert(0, value)
|
|
||||||
self.config[ui_key].pop()
|
|
||||||
# Re-build the menu
|
|
||||||
self.build_tray_bwsetsubmenu()
|
|
||||||
|
|
||||||
def unlock_tray(self, comingnext, is_showing_dlg=[False]):
|
def unlock_tray(self, comingnext, is_showing_dlg=[False]):
|
||||||
import sha
|
import sha
|
||||||
|
Loading…
x
Reference in New Issue
Block a user