def __init__(self): component.Component.__init__(self, "QueuedTorrents", depend=["StatusBar", "AddTorrentDialog"]) self.queue = [] self.status_item = None self.config = ConfigManager("gtkui.conf") self.glade = gtk.glade.XML( deluge.common.resource_filename("deluge.ui.gtkui", os.path.join("glade", "queuedtorrents.glade")) ) self.glade.get_widget("chk_autoadd").set_active(self.config["autoadd_queued"]) self.dialog = self.glade.get_widget("queued_torrents_dialog") self.dialog.set_icon(common.get_logo(32)) self.glade.signal_autoconnect( { "on_button_remove_clicked": self.on_button_remove_clicked, "on_button_clear_clicked": self.on_button_clear_clicked, "on_button_close_clicked": self.on_button_close_clicked, "on_button_add_clicked": self.on_button_add_clicked, "on_chk_autoadd_toggled": self.on_chk_autoadd_toggled, } ) self.treeview = self.glade.get_widget("treeview") self.treeview.append_column(gtk.TreeViewColumn(_("Torrent"), gtk.CellRendererText(), text=0)) self.liststore = gtk.ListStore(str, str) self.treeview.set_model(self.liststore)
def __init__(self): component.Component.__init__(self, "QueuedTorrents", depend=["StatusBar", "AddTorrentDialog"]) self.queue = [] self.status_item = None self.config = ConfigManager("gtkui.conf") self.glade = gtk.glade.XML( pkg_resources.resource_filename("deluge.ui.gtkui", "glade/queuedtorrents.glade")) self.glade.get_widget("chk_autoadd").set_active( self.config["autoadd_queued"]) self.dialog = self.glade.get_widget("queued_torrents_dialog") self.dialog.set_icon(common.get_logo(32)) self.glade.signal_autoconnect({ "on_button_remove_clicked": self.on_button_remove_clicked, "on_button_clear_clicked": self.on_button_clear_clicked, "on_button_close_clicked": self.on_button_close_clicked, "on_button_add_clicked": self.on_button_add_clicked, "on_chk_autoadd_toggled": self.on_chk_autoadd_toggled }) self.treeview = self.glade.get_widget("treeview") self.treeview.append_column( gtk.TreeViewColumn(_("Torrent"), gtk.CellRendererText(), text=0)) self.liststore = gtk.ListStore(str, str) self.treeview.set_model(self.liststore)
def popup(self, status): """popups up notification of finished torrent""" if not deluge.common.windows_check(): try: import pynotify except: log.warning("pynotify is not installed") else: if not pynotify.init("Deluge"): return title = deluge.common.xml_encode(_("Torrent complete")) message = deluge.common.xml_encode("%s\n%s %i %s" % (status["name"], _("Including"), status["num_files"], _("files"))) self.note = pynotify.Notification(title, message) self.note.set_icon_from_pixbuf(common.get_logo(48)) if not self.note.show(): log.warning("pynotify failed to show notification")
def popup(self, status): """popups up notification of finished torrent""" if not deluge.common.windows_check(): try: from gi.repository import Notify except: log.warning("pynotify is not installed") else: if not Notify.init("Deluge"): return title = deluge.common.xml_encode(_("Torrent complete")) message = deluge.common.xml_encode( "%s\n%s %i %s" % (status["name"], _("Including"), status["num_files"], _("files"))) self.note = Notify.Notification(title, message) self.note.set_icon_from_pixbuf(common.get_logo(48)) if not self.note.show(): log.warning("pynotify failed to show notification")
def show(self): """ Show the ConnectionManager dialog. """ # Get the glade file for the connection manager self.glade = gtk.glade.XML( pkg_resources.resource_filename("deluge.ui.gtkui", "glade/connection_manager.glade")) self.window = component.get("MainWindow") # Setup the ConnectionManager dialog self.connection_manager = self.glade.get_widget("connection_manager") self.connection_manager.set_transient_for(self.window.window) self.connection_manager.set_icon(common.get_deluge_icon()) self.glade.get_widget("image1").set_from_pixbuf(common.get_logo(32)) self.hostlist = self.glade.get_widget("hostlist") # Create status pixbufs if not HOSTLIST_PIXBUFS: for stock_id in (gtk.STOCK_NO, gtk.STOCK_YES, gtk.STOCK_CONNECT): HOSTLIST_PIXBUFS.append(self.connection_manager.render_icon(stock_id, gtk.ICON_SIZE_MENU)) # Create the host list gtkliststore # id-hash, hostname, port, status, username, password, version self.liststore = gtk.ListStore(str, str, int, str, str, str, str) # Setup host list treeview self.hostlist.set_model(self.liststore) render = gtk.CellRendererPixbuf() column = gtk.TreeViewColumn(_("Status"), render) column.set_cell_data_func(render, cell_render_status, 3) self.hostlist.append_column(column) render = gtk.CellRendererText() column = gtk.TreeViewColumn(_("Host"), render, text=HOSTLIST_COL_HOST) column.set_cell_data_func(render, cell_render_host, (1, 2, 4)) column.set_expand(True) self.hostlist.append_column(column) render = gtk.CellRendererText() column = gtk.TreeViewColumn(_("Version"), render, text=HOSTLIST_COL_VERSION) self.hostlist.append_column(column) # Load any saved host entries self.__load_hostlist() self.__load_options() # Select the first host if possible if len(self.liststore) > 0: self.hostlist.get_selection().select_path("0") # Connect the signals to the handlers self.glade.signal_autoconnect(self) self.hostlist.get_selection().connect("changed", self.on_hostlist_selection_changed) self.__update_list() self.running = True response = self.connection_manager.run() self.running = False # Save the toggle options self.__save_options() self.__save_hostlist() self.connection_manager.destroy() del self.glade del self.window del self.connection_manager del self.liststore del self.hostlist
def enable(self): """Enables the system tray icon.""" self.builder = gtk.Builder() self.builder.add_from_file(deluge.common.resource_filename( "deluge.ui.gtkui", os.path.join("glade", "tray_menu.ui")) ) self.builder.connect_signals({ "on_menuitem_show_deluge_activate": self.on_menuitem_show_deluge_activate, "on_menuitem_add_torrent_activate": self.on_menuitem_add_torrent_activate, "on_menuitem_pause_all_activate": self.on_menuitem_pause_all_activate, "on_menuitem_resume_all_activate": self.on_menuitem_resume_all_activate, "on_menuitem_quit_activate": self.on_menuitem_quit_activate, "on_menuitem_quitdaemon_activate": self.on_menuitem_quitdaemon_activate }) self.tray_menu = self.builder.get_object("tray_menu") if appindicator and self.config["enable_appindicator"]: log.debug("Enabling the Application Indicator..") self.indicator = appindicator.Indicator ( "deluge", "deluge", appindicator.CATEGORY_APPLICATION_STATUS) # Pass the menu to the Application Indicator self.indicator.set_menu(self.tray_menu) # Make sure the status of the Show Window MenuItem is correct self._sig_win_hide = self.window.window.connect("hide", self._on_window_hide) self._sig_win_show = self.window.window.connect("show", self._on_window_show) if self.window.visible(): self.builder.get_object("menuitem_show_deluge").set_active(True) else: self.builder.get_object("menuitem_show_deluge").set_active(False) # Show the Application Indicator self.indicator.set_status(appindicator.STATUS_ACTIVE) else: log.debug("Enabling the system tray icon..") if deluge.common.windows_check() or deluge.common.osx_check(): self.tray = gtk.status_icon_new_from_pixbuf(common.get_logo(32)) else: try: self.tray = gtk.status_icon_new_from_icon_name("deluge") except: log.warning("Update PyGTK to 2.10 or greater for SystemTray..") return self.tray.connect("activate", self.on_tray_clicked) self.tray.connect("popup-menu", self.on_tray_popup) # For some reason these icons do not display in appindicator self.builder.get_object("download-limit-image").set_from_file( deluge.common.get_pixmap("downloading16.png")) self.builder.get_object("upload-limit-image").set_from_file( deluge.common.get_pixmap("seeding16.png")) client.register_event_handler("ConfigValueChangedEvent", self.config_value_changed) if client.connected(): # We're connected so we need to get some values from the core self.__start() else: # Hide menu widgets because we're not connected to a host. for widget in self.hide_widget_list: self.builder.get_object(widget).hide()
def show(self): """ Show the ConnectionManager dialog. """ self.config = self.__load_config() # Get the gtk builder file for the connection manager self.builder = gtk.Builder() # The main dialog self.builder.add_from_file(deluge.common.resource_filename( "deluge.ui.gtkui", os.path.join("glade", "connection_manager.ui") )) # The add host dialog self.builder.add_from_file(deluge.common.resource_filename( "deluge.ui.gtkui", os.path.join("glade", "connection_manager.addhost.ui") )) # The ask password dialog self.builder.add_from_file(deluge.common.resource_filename( "deluge.ui.gtkui", os.path.join("glade", "connection_manager.askpassword.ui") )) self.window = component.get("MainWindow") # Setup the ConnectionManager dialog self.connection_manager = self.builder.get_object("connection_manager") self.connection_manager.set_transient_for(self.window.window) self.connection_manager.set_icon(common.get_deluge_icon()) self.builder.get_object("image1").set_from_pixbuf(common.get_logo(32)) self.askpassword_dialog = self.builder.get_object("askpassword_dialog") self.askpassword_dialog.set_transient_for(self.connection_manager) self.askpassword_dialog.set_icon(common.get_deluge_icon()) self.askpassword_dialog_entry = self.builder.get_object("askpassword_dialog_entry") self.hostlist = self.builder.get_object("hostlist") # Create status pixbufs if not HOSTLIST_PIXBUFS: for stock_id in (gtk.STOCK_NO, gtk.STOCK_YES, gtk.STOCK_CONNECT): HOSTLIST_PIXBUFS.append( self.connection_manager.render_icon( stock_id, gtk.ICON_SIZE_MENU ) ) # Create the host list gtkliststore # id-hash, hostname, port, status, username, password, version self.liststore = gtk.ListStore(str, str, int, str, str, str, str) # Setup host list treeview self.hostlist.set_model(self.liststore) render = gtk.CellRendererPixbuf() column = gtk.TreeViewColumn(_("Status"), render) column.set_cell_data_func(render, cell_render_status, 3) self.hostlist.append_column(column) render = gtk.CellRendererText() column = gtk.TreeViewColumn(_("Host"), render, text=HOSTLIST_COL_HOST) column.set_cell_data_func(render, cell_render_host, (1, 2, 4)) column.set_expand(True) self.hostlist.append_column(column) render = gtk.CellRendererText() column = gtk.TreeViewColumn(_("Version"), render, text=HOSTLIST_COL_VERSION) self.hostlist.append_column(column) # Connect the signals to the handlers self.builder.connect_signals(self) self.hostlist.get_selection().connect( "changed", self.on_hostlist_selection_changed ) # Load any saved host entries self.__load_hostlist() self.__load_options() self.__update_list() self.running = True # Trigger the on_selection_changed code and select the first host # if possible self.hostlist.get_selection().unselect_all() if len(self.liststore) > 0: self.hostlist.get_selection().select_path("0") # Run the dialog response = self.connection_manager.run() self.running = False # Save the toggle options self.__save_options() self.__save_hostlist() self.connection_manager.destroy() del self.builder del self.window del self.connection_manager del self.liststore del self.hostlist
def enable(self): """Enables the system tray icon.""" self.builder = gtk.Builder() self.builder.add_from_file( deluge.common.resource_filename( "deluge.ui.gtkui", os.path.join("glade", "tray_menu.ui"))) self.builder.connect_signals({ "on_menuitem_show_deluge_activate": self.on_menuitem_show_deluge_activate, "on_menuitem_add_torrent_activate": self.on_menuitem_add_torrent_activate, "on_menuitem_pause_all_activate": self.on_menuitem_pause_all_activate, "on_menuitem_resume_all_activate": self.on_menuitem_resume_all_activate, "on_menuitem_quit_activate": self.on_menuitem_quit_activate, "on_menuitem_quitdaemon_activate": self.on_menuitem_quitdaemon_activate }) self.tray_menu = self.builder.get_object("tray_menu") if appindicator and self.config["enable_appindicator"]: log.debug("Enabling the Application Indicator..") self.indicator = appindicator.Indicator( "deluge", "deluge", appindicator.CATEGORY_APPLICATION_STATUS) try: self.indicator.set_property("title", _("Deluge")) except TypeError: # Catch 'title' property error for previous appindicator versions pass # Pass the menu to the Application Indicator self.indicator.set_menu(self.tray_menu) # Make sure the status of the Show Window MenuItem is correct self._sig_win_hide = self.window.window.connect( "hide", self._on_window_hide) self._sig_win_show = self.window.window.connect( "show", self._on_window_show) if self.window.visible(): self.builder.get_object("menuitem_show_deluge").set_active( True) else: self.builder.get_object("menuitem_show_deluge").set_active( False) # Show the Application Indicator self.indicator.set_status(appindicator.STATUS_ACTIVE) else: log.debug("Enabling the system tray icon..") if deluge.common.windows_check() or deluge.common.osx_check(): self.tray = gtk.status_icon_new_from_pixbuf( common.get_logo(32)) else: try: self.tray = gtk.status_icon_new_from_icon_name("deluge") except: log.warning( "Update PyGTK to 2.10 or greater for SystemTray..") return self.tray.connect("activate", self.on_tray_clicked) self.tray.connect("popup-menu", self.on_tray_popup) self.builder.get_object("download-limit-image").set_from_file( deluge.common.get_pixmap("downloading16.png")) self.builder.get_object("upload-limit-image").set_from_file( deluge.common.get_pixmap("seeding16.png")) client.register_event_handler("ConfigValueChangedEvent", self.config_value_changed) if client.connected(): # We're connected so we need to get some values from the core self.__start() else: # Hide menu widgets because we're not connected to a host. for widget in self.hide_widget_list: self.builder.get_object(widget).hide()