Modify the remove torrent behaviour to be more HIG compliant.

Add the ability to set per-torrent options from the Torrent menu.
Add new CoreConfig component for keeping a local mirror of the core 
config.
This commit is contained in:
Andrew Resch 2008-02-17 22:39:50 +00:00
parent 89bea0a40f
commit 335c037add
6 changed files with 353 additions and 288 deletions

View file

@ -1,239 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
<!--Generated with glade3 3.2.2 on Fri Nov 9 18:22:43 2007 by andrew@fragment-->
<!--Generated with glade3 3.4.0 on Sun Feb 17 12:13:24 2008 -->
<glade-interface>
<widget class="GtkDialog" id="remove_torrent_dlg">
<property name="title" translatable="yes">Remove Torrent</property>
<property name="window_position">GTK_WIN_POS_CENTER</property>
<property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
<property name="skip_taskbar_hint">True</property>
<property name="skip_pager_hint">True</property>
<property name="has_separator">False</property>
<child internal-child="vbox">
<widget class="GtkVBox" id="dialog-vbox3">
<property name="visible">True</property>
<child>
<widget class="GtkVBox" id="vbox1">
<property name="visible">True</property>
<property name="spacing">10</property>
<child>
<widget class="GtkHBox" id="hbox1">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="spacing">3</property>
<child>
<widget class="GtkImage" id="image1">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="stock">gtk-dialog-warning</property>
<property name="icon_size">6</property>
</widget>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="padding">5</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">&lt;span size="large"&gt;&lt;b&gt;Are you sure you want to remove the selected torrent(s) from Deluge?&lt;/b&gt;&lt;/span&gt;</property>
<property name="use_markup">True</property>
<property name="wrap">True</property>
</widget>
<packing>
<property name="padding">10</property>
<property name="position">1</property>
</packing>
</child>
</widget>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="padding">5</property>
</packing>
</child>
<child>
<widget class="GtkAlignment" id="alignment1">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="left_padding">20</property>
<child>
<widget class="GtkCheckButton" id="data_also">
<property name="visible">True</property>
<property name="label" translatable="yes">Delete downloaded files</property>
<property name="response_id">0</property>
<property name="draw_indicator">True</property>
</widget>
</child>
</widget>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
<child>
<widget class="GtkAlignment" id="alignment2">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="bottom_padding">5</property>
<property name="left_padding">20</property>
<child>
<widget class="GtkCheckButton" id="torrent_also">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">Delete .torrent file</property>
<property name="response_id">0</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
</widget>
</child>
</widget>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">2</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="warning">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
</widget>
<packing>
<property name="position">3</property>
</packing>
</child>
</widget>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="padding">5</property>
<property name="position">1</property>
</packing>
</child>
<child internal-child="action_area">
<widget class="GtkHButtonBox" id="dialog-action_area3">
<property name="visible">True</property>
<property name="layout_style">GTK_BUTTONBOX_END</property>
<child>
<widget class="GtkButton" id="button2">
<property name="visible">True</property>
<property name="label">gtk-no</property>
<property name="use_stock">True</property>
<property name="response_id">0</property>
</widget>
</child>
<child>
<widget class="GtkButton" id="button1">
<property name="visible">True</property>
<property name="label">gtk-yes</property>
<property name="use_stock">True</property>
<property name="response_id">1</property>
</widget>
<packing>
<property name="position">1</property>
</packing>
</child>
</widget>
<packing>
<property name="expand">False</property>
<property name="pack_type">GTK_PACK_END</property>
</packing>
</child>
</widget>
</child>
</widget>
<widget class="GtkMenu" id="tray_menu">
<property name="visible">True</property>
<child>
<widget class="GtkMenuItem" id="menuitem10">
<property name="visible">True</property>
<property name="label" translatable="yes">Show/Hide</property>
<property name="use_underline">True</property>
<signal name="activate" handler="show_hide_window"/>
</widget>
</child>
<child>
<widget class="GtkImageMenuItem" id="menuitem9">
<property name="visible">True</property>
<property name="label" translatable="yes">Add a Torrent...</property>
<property name="use_underline">True</property>
<signal name="activate" handler="add_torrent"/>
<child internal-child="image">
<widget class="GtkImage" id="menu-item-image1">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="stock">gtk-add</property>
<property name="icon_size">1</property>
</widget>
</child>
</widget>
</child>
<child>
<widget class="GtkImageMenuItem" id="menuitem11">
<property name="visible">True</property>
<property name="label" translatable="yes">Clear Finished</property>
<property name="use_underline">True</property>
<signal name="activate" handler="clear_finished"/>
<child internal-child="image">
<widget class="GtkImage" id="menu-item-image2">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="stock">gtk-clear</property>
<property name="icon_size">1</property>
</widget>
</child>
</widget>
</child>
<child>
<widget class="GtkSeparatorMenuItem" id="separatormenuitem2">
<property name="visible">True</property>
</widget>
</child>
<child>
<widget class="GtkImageMenuItem" id="menuitem12">
<property name="visible">True</property>
<property name="label">gtk-preferences</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
<signal name="activate" handler="preferences"/>
</widget>
</child>
<child>
<widget class="GtkImageMenuItem" id="menuitem13">
<property name="visible">True</property>
<property name="label" translatable="yes">Plugins</property>
<property name="use_underline">True</property>
<signal name="activate" handler="plugins"/>
<child internal-child="image">
<widget class="GtkImage" id="menu-item-image3">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="stock">gtk-execute</property>
<property name="icon_size">1</property>
</widget>
</child>
</widget>
</child>
<child>
<widget class="GtkSeparatorMenuItem" id="separatormenuitem1">
<property name="visible">True</property>
</widget>
</child>
<child>
<widget class="GtkImageMenuItem" id="menuitem14">
<property name="visible">True</property>
<property name="label">gtk-quit</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
<signal name="activate" handler="quit"/>
</widget>
</child>
</widget>
<widget class="GtkDialog" id="speed_dialog">
<property name="app_paintable">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>

View file

@ -1,12 +1,11 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
<!--Generated with glade3 3.4.1 on Tue Jan 22 01:29:43 2008 -->
<!--Generated with glade3 3.4.0 on Sun Feb 17 13:32:23 2008 -->
<glade-interface>
<widget class="GtkDialog" id="remove_torrent_dialog">
<property name="width_request">350</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="border_width">5</property>
<property name="title" translatable="yes">Remove Torrent</property>
<property name="title" translatable="yes">Remove Torrent?</property>
<property name="resizable">False</property>
<property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
<property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
@ -25,13 +24,13 @@
<widget class="GtkHBox" id="hbox1">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="spacing">5</property>
<property name="spacing">10</property>
<child>
<widget class="GtkImage" id="image1">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="stock">gtk-dialog-warning</property>
<property name="icon_size">5</property>
<property name="icon_size">6</property>
</widget>
<packing>
<property name="expand">False</property>
@ -39,11 +38,12 @@
</packing>
</child>
<child>
<widget class="GtkLabel" id="label1">
<widget class="GtkLabel" id="label_title">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">&lt;big&gt;&lt;b&gt;Remove Torrent(s)?&lt;/b&gt;&lt;/big&gt;</property>
<property name="label" translatable="yes">&lt;big&gt;&lt;b&gt;Are you sure you want to remove the selected torrent?&lt;/b&gt;&lt;/big&gt;</property>
<property name="use_markup">True</property>
<property name="wrap">True</property>
</widget>
<packing>
<property name="expand">False</property>
@ -59,7 +59,6 @@
</child>
<child>
<widget class="GtkHSeparator" id="hseparator1">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
</widget>
<packing>
@ -67,40 +66,44 @@
<property name="position">1</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label2">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="xalign">0</property>
<property name="xpad">10</property>
<property name="label" translatable="yes">&lt;b&gt;Options&lt;/b&gt;</property>
<property name="use_markup">True</property>
</widget>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">2</property>
</packing>
</child>
<child>
<widget class="GtkAlignment" id="alignment1">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="left_padding">15</property>
<child>
<widget class="GtkCheckButton" id="chk_torrents">
<property name="visible">True</property>
<property name="can_focus">True</property>
<widget class="GtkHBox" id="hbox_torrentfile">
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">Delete .torrent file(s)</property>
<property name="response_id">0</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
<property name="spacing">5</property>
<child>
<widget class="GtkImage" id="image2">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="stock">gtk-dialog-warning</property>
</widget>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label_torrentfile_warning">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">&lt;i&gt;The associated .torrent will be deleted!&lt;/i&gt;</property>
<property name="use_markup">True</property>
</widget>
<packing>
<property name="position">1</property>
</packing>
</child>
</widget>
</child>
</widget>
<packing>
<property name="position">3</property>
<property name="position">2</property>
</packing>
</child>
<child>
@ -109,18 +112,37 @@
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="left_padding">15</property>
<child>
<widget class="GtkCheckButton" id="chk_data">
<property name="visible">True</property>
<property name="can_focus">True</property>
<widget class="GtkHBox" id="hbox_data">
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">Delete saved data</property>
<property name="response_id">0</property>
<property name="draw_indicator">True</property>
<property name="spacing">5</property>
<child>
<widget class="GtkImage" id="image3">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="stock">gtk-dialog-warning</property>
</widget>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label_data_warning">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">&lt;i&gt;The downloaded data will be deleted!&lt;/i&gt;</property>
<property name="use_markup">True</property>
</widget>
<packing>
<property name="position">1</property>
</packing>
</child>
</widget>
</child>
</widget>
<packing>
<property name="position">4</property>
<property name="position">3</property>
</packing>
</child>
</widget>
@ -135,7 +157,7 @@
<widget class="GtkHButtonBox" id="dialog-action_area1">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="layout_style">GTK_BUTTONBOX_END</property>
<property name="layout_style">GTK_BUTTONBOX_CENTER</property>
<child>
<widget class="GtkButton" id="button_cancel">
<property name="visible">True</property>
@ -154,8 +176,7 @@
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">gtk-ok</property>
<property name="use_stock">True</property>
<property name="label" translatable="yes">Remove Selected Torrent</property>
<property name="response_id">0</property>
<signal name="clicked" handler="on_button_ok_clicked"/>
</widget>

View file

@ -64,6 +64,28 @@
<property name="visible">True</property>
</widget>
</child>
<child>
<widget class="GtkImageMenuItem" id="menuitem_options">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">Opt_ions</property>
<property name="use_underline">True</property>
<child internal-child="image">
<widget class="GtkImage" id="menu-item-image18">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="stock">gtk-preferences</property>
<property name="icon_size">1</property>
</widget>
</child>
</widget>
</child>
<child>
<widget class="GtkSeparatorMenuItem" id="separator_menuitem16">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
</widget>
</child>
<child>
<widget class="GtkImageMenuItem" id="menuitem_updatetracker">
<property name="visible">True</property>
@ -108,7 +130,6 @@
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">_Remove Torrent</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_menuitem_remove_activate"/>
<child internal-child="image">
<widget class="GtkImage" id="menu-item-image9">
<property name="visible">True</property>
@ -142,7 +163,7 @@
</widget>
</child>
<child>
<widget class="GtkImageMenuItem" id="menuitem1">
<widget class="GtkImageMenuItem" id="menuitem_move">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">Move _Torrent</property>
@ -159,4 +180,118 @@
</widget>
</child>
</widget>
<widget class="GtkMenu" id="remove_torrent_menu">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<child>
<widget class="GtkMenuItem" id="menuitem_remove_session">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">From Session</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_menuitem_remove_session_activate"/>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="menuitem_remove_torrentfile">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">.. And Delete Torrent File</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_menuitem_remove_torrentfile_activate"/>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="menuitem_remove_data">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">.. And Delete Downloaded Files</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_menuitem_remove_data_activate"/>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="menuitem_remove_both">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">.. And Delete All Files</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_menuitem_remove_both_activate"/>
</widget>
</child>
</widget>
<widget class="GtkMenu" id="options_torrent_menu">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<child>
<widget class="GtkImageMenuItem" id="menuitem_down_speed">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">_Download Speed Limit</property>
<property name="use_underline">True</property>
<child internal-child="image">
<widget class="GtkImage" id="download-limit-image">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="stock">gtk-missing-image</property>
</widget>
</child>
</widget>
</child>
<child>
<widget class="GtkImageMenuItem" id="menuitem_up_speed">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">_Upload Speed Limit</property>
<property name="use_underline">True</property>
<child internal-child="image">
<widget class="GtkImage" id="upload-limit-image">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="stock">gtk-missing-image</property>
</widget>
</child>
</widget>
</child>
<child>
<widget class="GtkImageMenuItem" id="menuitem_max_connections">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">_Connection Limit</property>
<property name="use_underline">True</property>
<child internal-child="image">
<widget class="GtkImage" id="menu-item-image16">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="stock">gtk-network</property>
<property name="icon_size">1</property>
</widget>
</child>
</widget>
</child>
<child>
<widget class="GtkImageMenuItem" id="menuitem_upload_slots">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">Upload _Slot Limit</property>
<property name="use_underline">True</property>
<child internal-child="image">
<widget class="GtkImage" id="menu-item-image17">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="stock">gtk-sort-ascending</property>
<property name="icon_size">1</property>
</widget>
</child>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="menuitem_private">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">_Private</property>
<property name="use_underline">True</property>
</widget>
</child>
</widget>
</glade-interface>

View file

@ -59,9 +59,9 @@ from signals import Signals
from pluginmanager import PluginManager
from dbusinterface import DbusInterface
from queuedtorrents import QueuedTorrents
from coreconfig import CoreConfig
from deluge.configmanager import ConfigManager
import deluge.common
import deluge.configmanager
DEFAULT_PREFS = {
"config_location": deluge.common.get_config_dir(),
@ -151,7 +151,8 @@ class GtkUI:
# Start the signal receiver
self.signal_receiver = Signals()
self.coreconfig = CoreConfig()
# Initalize the plugins
self.plugins = PluginManager()

View file

@ -52,6 +52,42 @@ class MenuBar(component.Component):
pkg_resources.resource_filename("deluge.ui.gtkui",
"glade/torrent_menu.glade"))
# Attach remove torrent menu
self.torrentmenu_glade.get_widget("menuitem_remove").set_submenu(
self.torrentmenu_glade.get_widget("remove_torrent_menu"))
# Attach options torrent menu
self.torrentmenu_glade.get_widget("menuitem_options").set_submenu(
self.torrentmenu_glade.get_widget("options_torrent_menu"))
self.torrentmenu_glade.get_widget("download-limit-image").set_from_file(
common.get_pixmap("downloading16.png"))
self.torrentmenu_glade.get_widget("upload-limit-image").set_from_file(
common.get_pixmap("seeding16.png"))
for menuitem in ("menuitem_down_speed", "menuitem_up_speed",
"menuitem_max_connections", "menuitem_upload_slots"):
submenu = gtk.Menu()
item = gtk.MenuItem(_("Set Unlimited"))
item.set_name(menuitem)
item.connect("activate", self.on_menuitem_set_unlimited)
submenu.append(item)
item = gtk.MenuItem(_("Other.."))
item.set_name(menuitem)
item.connect("activate", self.on_menuitem_set_other)
submenu.append(item)
submenu.show_all()
self.torrentmenu_glade.get_widget(menuitem).set_submenu(submenu)
submenu = gtk.Menu()
item = gtk.MenuItem(_("Set Private On"))
item.connect("activate", self.on_menuitem_set_private_on)
submenu.append(item)
item = gtk.MenuItem(_("Set Private Off"))
item.connect("activate", self.on_menuitem_set_private_off)
submenu.append(item)
submenu.show_all()
self.torrentmenu_glade.get_widget("menuitem_private").set_submenu(submenu)
self.torrentmenu = self.torrentmenu_glade.get_widget("torrent_menu")
self.menu_torrent = self.window.main_glade.get_widget("menu_torrent")
@ -94,7 +130,15 @@ class MenuBar(component.Component):
self.on_menuitem_updatetracker_activate,
"on_menuitem_edittrackers_activate": \
self.on_menuitem_edittrackers_activate,
"on_menuitem_remove_activate": self.on_menuitem_remove_activate,
"on_menuitem_remove_session_activate": \
self.on_menuitem_remove_session_activate,
"on_menuitem_remove_torrentfile_activate": \
self.on_menuitem_remove_torrentfile_activate,
"on_menuitem_remove_data_activate": \
self.on_menuitem_remove_data_activate,
"on_menuitem_remove_both_activate": \
self.on_menuitem_remove_both_activate,
"on_menuitem_recheck_activate": self.on_menuitem_recheck_activate,
"on_menuitem_open_folder": self.on_menuitem_open_folder_activate,
"on_menuitem_move_activate": self.on_menuitem_move_activate
@ -195,14 +239,34 @@ class MenuBar(component.Component):
component.get("TorrentView").get_selected_torrent(),
component.get("MainWindow").window)
dialog.run()
def on_menuitem_remove_activate(self, data=None):
log.debug("on_menuitem_remove_activate")
def on_menuitem_remove_session_activate(self, data=None):
log.debug("on_menuitem_remove_session_activate")
from removetorrentdialog import RemoveTorrentDialog
RemoveTorrentDialog(
component.get("TorrentView").get_selected_torrents()).run()
#client.remove_torrent(
# component.get("TorrentView").get_selected_torrents())
def on_menuitem_remove_torrentfile_activate(self, data=None):
log.debug("on_menuitem_remove_torrentfile_activate")
from removetorrentdialog import RemoveTorrentDialog
RemoveTorrentDialog(
component.get("TorrentView").get_selected_torrents(),
remove_torrentfile=True).run()
def on_menuitem_remove_data_activate(self, data=None):
log.debug("on_menuitem_remove_data_activate")
from removetorrentdialog import RemoveTorrentDialog
RemoveTorrentDialog(
component.get("TorrentView").get_selected_torrents(),
remove_data=True).run()
def on_menuitem_remove_both_activate(self, data=None):
log.debug("on_menuitem_remove_both_activate")
from removetorrentdialog import RemoveTorrentDialog
RemoveTorrentDialog(
component.get("TorrentView").get_selected_torrents(),
remove_torrentfile=True,
remove_data=True).run()
def on_menuitem_recheck_activate(self, data=None):
log.debug("on_menuitem_recheck_activate")
@ -262,3 +326,61 @@ class MenuBar(component.Component):
from aboutdialog import AboutDialog
AboutDialog().run()
def on_menuitem_set_unlimited(self, widget):
log.debug("widget.name: %s", widget.name)
funcs = {
"menuitem_down_speed": client.set_torrent_max_download_speed,
"menuitem_up_speed": client.set_torrent_max_upload_speed,
"menuitem_max_connections": client.set_torrent_max_connections,
"menuitem_upload_slots": client.set_torrent_max_upload_slots
}
if widget.name in funcs.keys():
for torrent in component.get("TorrentView").get_selected_torrents():
funcs[widget.name](torrent, -1)
def on_menuitem_set_other(self, widget):
log.debug("widget.name: %s", widget.name)
funcs = {
"menuitem_down_speed": client.set_torrent_max_download_speed,
"menuitem_up_speed": client.set_torrent_max_upload_speed,
"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:"))
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():
for torrent in component.get("TorrentView").get_selected_torrents():
funcs[widget.name](torrent, value)
def on_menuitem_set_private_on(self, widget):
for torrent in component.get("TorrentView").get_selected_torrents():
client.set_torrent_private_flag(torrent, True)
def on_menuitem_set_private_off(self, widget):
for torrent in component.get("TorrentView").get_selected_torrents():
client.set_torrent_private_flag(torrent, False)

View file

@ -40,8 +40,11 @@ import deluge.component as component
from deluge.log import LOG as log
class RemoveTorrentDialog:
def __init__(self, torrent_ids):
def __init__(self, torrent_ids, remove_torrentfile=False, remove_data=False):
self.torrent_ids = torrent_ids
self.remove_torrentfile = remove_torrentfile
self.remove_data = remove_data
self.glade = gtk.glade.XML(
pkg_resources.resource_filename("deluge.ui.gtkui",
"glade/remove_torrent_dialog.glade"))
@ -54,6 +57,20 @@ class RemoveTorrentDialog:
"on_button_ok_clicked": self.on_button_ok_clicked,
"on_button_cancel_clicked": self.on_button_cancel_clicked
})
if len(self.torrent_ids) > 1:
# We need to pluralize the dialog
self.dialog.set_title("Remove Torrents?")
self.glade.get_widget("label_title").set_markup(
_("<big><b>Are you sure you want to remove the selected torrents?</b></big>"))
self.glade.get_widget("button_ok").set_label(_("Remove Selected Torrents"))
if self.remove_torrentfile or self.remove_data:
self.glade.get_widget("hseparator1").show()
if self.remove_torrentfile:
self.glade.get_widget("hbox_torrentfile").show()
if self.remove_data:
self.glade.get_widget("hbox_data").show()
def run(self):
if self.torrent_ids == None or self.torrent_ids == []:
@ -62,9 +79,10 @@ class RemoveTorrentDialog:
self.dialog.show()
def on_button_ok_clicked(self, widget):
data = self.glade.get_widget("chk_data").get_active()
torrent = self.glade.get_widget("chk_torrents").get_active()
client.remove_torrent(self.torrent_ids, torrent, data)
#data = self.glade.get_widget("chk_data").get_active()
#torrent = self.glade.get_widget("chk_torrents").get_active()
client.remove_torrent(
self.torrent_ids, self.remove_torrentfile, self.remove_data)
self.dialog.destroy()
def on_button_cancel_clicked(self, widget):