diff --git a/ChangeLog b/ChangeLog
index 1ac06dd54..0ca54513b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -26,19 +26,17 @@ Deluge 1.1.0 - "" (In Development)
* Persistent sessions #486
* Plugin improvements for easy use of templates and images in eggs. #497
* Classic template takes over some style elements from white template.
- * Javascript Auto Refresh
* https (for users that know how to create certificates)
- * easyer apache mod_proxy use.
+ * Easier apache mod_proxy use.
* Redesigned sidebar
AjaxUI:
- * hosted in a webui template.
+ * Hosted in a webui template.
ConsoleUI (previously null-ui):
- * colors and enhancements by idoa01
- * callable from command-line for scripts.
+ * New ConsoleUI written by Idoa01
+ * Callable from command-line for scripts.
Plugins:
* Stats plugin for graphs.
* Label plugin for grouping torrents and per torrent settings.
-
diff --git a/deluge/ui/gtkui/glade/main_window.glade b/deluge/ui/gtkui/glade/main_window.glade
index 654a2a4d5..db7b6f6ea 100644
--- a/deluge/ui/gtkui/glade/main_window.glade
+++ b/deluge/ui/gtkui/glade/main_window.glade
@@ -316,10 +316,6 @@
gtk-add
-
- False
- False
-
-
- False
- False
-
True
-
- False
- False
-
@@ -354,10 +342,6 @@
gtk-media-pause
-
- False
- False
-
@@ -369,19 +353,11 @@
gtk-media-play
-
- False
- False
-
True
-
- False
- False
-
@@ -393,10 +369,6 @@
gtk-go-up
-
- False
- False
-
@@ -408,20 +380,12 @@
gtk-go-down
-
- False
- False
-
True
GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
-
- False
- False
-
@@ -432,10 +396,6 @@
gtk-preferences
-
- False
- False
-
@@ -446,10 +406,6 @@
gtk-network
-
- False
- False
-
@@ -491,7 +447,6 @@
True
True
- True
True
True
False
@@ -685,219 +640,280 @@
10
5
-
+
+ True
+ 0
+
+
+ 5
+ 6
+ 3
+ 4
+ GTK_FILL
+
+
+
+
+ True
+ 0
+ <b>Auto Managed:</b>
+ True
+
+
+ 4
+ 5
+ 3
+ 4
+ GTK_FILL
+
+
+
+
True
0
7
8
- 3
- 4
+ 2
+ 3
GTK_FILL
-
+
True
0
- <b>Date Added:</b>
+
+
+ 7
+ 8
+ 1
+ 2
+ GTK_FILL
+
+
+
+
+ True
+ 0
+ <b>Seed Rank:</b>
True
6
7
- 3
- 4
- GTK_FILL
-
-
-
-
- True
- 0
-
-
- 1
- 2
- GTK_FILL
-
-
-
-
- True
- 0
-
-
- 3
- 4
- GTK_FILL
-
-
-
-
- True
- 0
-
-
- 1
- 2
- 1
- 2
- GTK_FILL
-
-
-
-
- True
- 0
-
-
- 3
- 4
- 1
- 2
- GTK_FILL
-
-
-
-
- True
- 5
-
-
- True
- 0
- <b>Downloaded:</b>
- True
-
-
-
-
- GTK_FILL
-
-
-
-
- True
- 5
-
-
- True
- 0
- <b>Uploaded:</b>
- True
-
-
-
-
- 1
- 2
- GTK_FILL
-
-
-
-
- True
- 5
-
-
- True
- 0
- <b>Share Ratio:</b>
- True
-
-
-
-
2
3
GTK_FILL
-
+
True
- 5
-
-
- True
- 0
- <b>Next Announce:</b>
- True
-
-
+ 0
+ <b>Seeding Time:</b>
+ True
- 3
- 4
- GTK_FILL
-
-
-
-
- True
- 15
- 5
-
-
- True
- 0
- <b>Speed:</b>
- True
-
-
-
-
- 2
- 3
- GTK_FILL
-
-
-
-
- True
- 15
- 5
-
-
- True
- 0
- <b>Speed:</b>
- True
-
-
-
-
- 2
- 3
+ 6
+ 7
1
2
GTK_FILL
-
+
True
- 15
- 5
-
-
- True
- 0
- <b>ETA:</b>
- True
-
-
+ 0
- 2
- 3
+ 7
+ 8
+ GTK_FILL
+
+
+
+
+ True
+ 0
+ <b>Active Time:</b>
+ True
+
+
+ 6
+ 7
+ GTK_FILL
+
+
+
+
+ True
+ 0
+ True
+
+
+ 1
+ 2
+ 3
+ 4
+ GTK_FILL
+
+
+
+
+ True
+ 0
+
+
+ 3
+ 4
+ 3
+ 4
+ GTK_FILL
+
+
+
+
+ True
+ 0
+ True
+ PANGO_WRAP_CHAR
+ True
+
+
+ 1
+ 8
+ 4
+ 5
+ GTK_FILL
+
+
+
+
+ True
+ 0
+ 0
+ <b>Tracker Status:</b>
+ True
+
+
+ 4
+ 5
+ GTK_FILL
+ GTK_FILL
+
+
+
+
+ True
+ 0
+ True
+ PANGO_WRAP_WORD_CHAR
+
+
+ 5
+ 6
2
3
GTK_FILL
+
+
+ True
+ 0
+ 1
+ <b>Availability:</b>
+ True
+
+
+ 4
+ 5
+ 2
+ 3
+ GTK_FILL
+
+
+
+
+ True
+ 0
+
+
+ 3
+ 4
+ 2
+ 3
+ GTK_FILL
+
+
+
+
+ True
+ 0
+
+
+ 1
+ 2
+ 2
+ 3
+ GTK_FILL
+
+
+
+
+ True
+ 0
+
+
+ 5
+ 6
+ 1
+ 2
+ GTK_FILL
+
+
+
+
+ True
+ 0
+ <b>Peers:</b>
+ True
+
+
+ 4
+ 5
+ 1
+ 2
+ GTK_FILL
+
+
+
+
+ True
+ 0
+
+
+ 5
+ 6
+ GTK_FILL
+
+
+
+
+ True
+ 0
+ <b>Seeders:</b>
+ True
+
+
+ 4
+ 5
+ GTK_FILL
+
+
True
@@ -921,275 +937,214 @@
-
+
True
- 0
- <b>Seeders:</b>
- True
+ 15
+ 5
+
+
+ True
+ 0
+ <b>ETA:</b>
+ True
+
+
- 4
- 5
- GTK_FILL
-
-
-
-
- True
- 0
-
-
- 5
- 6
- GTK_FILL
-
-
-
-
- True
- 0
- <b>Peers:</b>
- True
-
-
- 4
- 5
- 1
- 2
- GTK_FILL
-
-
-
-
- True
- 0
-
-
- 5
- 6
- 1
- 2
- GTK_FILL
-
-
-
-
- True
- 0
-
-
- 1
- 2
+ 2
+ 3
2
3
GTK_FILL
-
+
+ True
+ 15
+ 5
+
+
+ True
+ 0
+ <b>Speed:</b>
+ True
+
+
+
+
+ 2
+ 3
+ 1
+ 2
+ GTK_FILL
+
+
+
+
+ True
+ 15
+ 5
+
+
+ True
+ 0
+ <b>Speed:</b>
+ True
+
+
+
+
+ 2
+ 3
+ GTK_FILL
+
+
+
+
+ True
+ 5
+
+
+ True
+ 0
+ <b>Next Announce:</b>
+ True
+
+
+
+
+ 3
+ 4
+ GTK_FILL
+
+
+
+
+ True
+ 5
+
+
+ True
+ 0
+ <b>Share Ratio:</b>
+ True
+
+
+
+
+ 2
+ 3
+ GTK_FILL
+
+
+
+
+ True
+ 5
+
+
+ True
+ 0
+ <b>Uploaded:</b>
+ True
+
+
+
+
+ 1
+ 2
+ GTK_FILL
+
+
+
+
+ True
+ 5
+
+
+ True
+ 0
+ <b>Downloaded:</b>
+ True
+
+
+
+
+ GTK_FILL
+
+
+
+
True
0
3
4
- 2
- 3
+ 1
+ 2
GTK_FILL
-
+
True
0
- 1
- <b>Availability:</b>
- True
-
-
- 4
- 5
- 2
- 3
- GTK_FILL
-
-
-
-
- True
- 0
- True
- PANGO_WRAP_WORD_CHAR
-
-
- 5
- 6
- 2
- 3
- GTK_FILL
-
-
-
-
- True
- 0
- 0
- <b>Tracker Status:</b>
- True
-
-
- 4
- 5
- GTK_FILL
- GTK_FILL
-
-
-
-
- True
- 0
- True
- PANGO_WRAP_CHAR
- True
1
- 8
- 4
- 5
- GTK_FILL
+ 2
+ 1
+ 2
+ GTK_FILL
-
+
True
0
3
4
- 3
- 4
GTK_FILL
-
+
True
0
- True
1
2
+ GTK_FILL
+
+
+
+
+ True
+ 0
+ <b>Date Added:</b>
+ True
+
+
+ 6
+ 7
3
4
GTK_FILL
-
- True
- 0
- <b>Active Time:</b>
- True
-
-
- 6
- 7
- GTK_FILL
-
-
-
-
+
True
0
7
8
- GTK_FILL
-
-
-
-
- True
- 0
- <b>Seeding Time:</b>
- True
-
-
- 6
- 7
- 1
- 2
- GTK_FILL
-
-
-
-
- True
- 0
- <b>Seed Rank:</b>
- True
-
-
- 6
- 7
- 2
- 3
- GTK_FILL
-
-
-
-
- True
- 0
-
-
- 7
- 8
- 1
- 2
- GTK_FILL
-
-
-
-
- True
- 0
-
-
- 7
- 8
- 2
- 3
- GTK_FILL
-
-
-
-
- True
- 0
- <b>Auto Managed:</b>
- True
-
-
- 4
- 5
- 3
- 4
- GTK_FILL
-
-
-
-
- True
- 0
-
-
- 5
- 6
3
4
GTK_FILL
@@ -1279,7 +1234,7 @@
-
+
True
0
True
@@ -1287,43 +1242,28 @@
1
2
- 3
- 4
+ 4
+ 5
-
- True
- GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
- 0
- True
-
-
- 1
- 4
- 5
- 6
-
-
-
-
-
+
True
0
1
- <b>Status:</b>
+ <b># of files:</b>
True
- 5
- 6
+ 4
+ 5
GTK_FILL
-
+
True
GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
0
@@ -1334,66 +1274,53 @@
1
4
- 2
- 3
+ 1
+ 2
-
+
True
GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
- 5
-
-
- True
- GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
- 0
- <b>Path:</b>
- True
-
-
-
-
- 2
- 3
- GTK_FILL
-
-
-
-
-
- True
- GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
- 5
-
-
- True
- 0
- 0
- 1
- <b>Name:</b>
- True
-
-
-
-
- GTK_FILL
-
-
-
-
-
- True
- GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_STRUCTURE_MASK
0
- True
+ <b>Hash:</b>
+ True
+
+
+ 1
+ 2
+ GTK_FILL
+
+
+
+
+
+ True
+ 0
PANGO_WRAP_CHAR
True
1
4
+ 6
+ 7
+
+
+
+
+
+ True
+ 0
+ 1
+ <b>Tracker:</b>
+ True
+
+
+ 6
+ 7
+ GTK_FILL
@@ -1420,52 +1347,65 @@
-
- True
- 0
- 1
- <b>Tracker:</b>
- True
-
-
- 6
- 7
- GTK_FILL
-
-
-
-
-
+
True
+ GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_STRUCTURE_MASK
0
+ True
PANGO_WRAP_CHAR
True
1
4
- 6
- 7
-
+
True
GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
- 0
- <b>Hash:</b>
- True
+ 5
+
+
+ True
+ 0
+ 0
+ 1
+ <b>Name:</b>
+ True
+
+
- 1
- 2
GTK_FILL
-
+
+ True
+ GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
+ 5
+
+
+ True
+ GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
+ 0
+ <b>Path:</b>
+ True
+
+
+
+
+ 2
+ 3
+ GTK_FILL
+
+
+
+
+
True
GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
0
@@ -1476,28 +1416,43 @@
1
4
- 1
- 2
+ 2
+ 3
-
+
True
0
1
- <b># of files:</b>
+ <b>Status:</b>
True
- 4
- 5
+ 5
+ 6
GTK_FILL
-
+
+ True
+ GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
+ 0
+ True
+
+
+ 1
+ 4
+ 5
+ 6
+
+
+
+
+
True
0
True
@@ -1505,8 +1460,8 @@
1
2
- 4
- 5
+ 3
+ 4
@@ -1563,7 +1518,6 @@
True
True
GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
- True
@@ -1613,7 +1567,6 @@
True
True
GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
- True
@@ -1689,7 +1642,7 @@
-
+
True
True
6
@@ -1699,100 +1652,8 @@
1
2
- 3
- 4
-
-
-
-
-
-
- True
- 0
- Max Upload Slots:
-
-
- 3
- 4
- GTK_FILL
-
-
-
-
-
- True
- KiB/s
-
-
- 2
- 3
- 1
- 2
-
-
-
-
-
-
- True
- KiB/s
-
-
- 2
- 3
-
-
-
-
-
-
- True
- 0
- Max Download Speed:
-
-
- GTK_FILL
-
-
-
-
-
- True
- 0
- Max Upload Speed:
-
-
- 1
- 2
- GTK_FILL
-
-
-
-
-
- True
- 0
- Max Connections:
-
-
2
3
- GTK_FILL
-
-
-
-
-
- True
- True
- 6
- 1
- -1 -1 999999 1 10 10
- 1
-
-
- 1
- 2
@@ -1816,7 +1677,99 @@
-
+
+ True
+ True
+ 6
+ 1
+ -1 -1 999999 1 10 10
+ 1
+
+
+ 1
+ 2
+
+
+
+
+
+
+ True
+ 0
+ Max Connections:
+
+
+ 2
+ 3
+ GTK_FILL
+
+
+
+
+
+ True
+ 0
+ Max Upload Speed:
+
+
+ 1
+ 2
+ GTK_FILL
+
+
+
+
+
+ True
+ 0
+ Max Download Speed:
+
+
+ GTK_FILL
+
+
+
+
+
+ True
+ KiB/s
+
+
+ 2
+ 3
+
+
+
+
+
+
+ True
+ KiB/s
+
+
+ 2
+ 3
+ 1
+ 2
+
+
+
+
+
+
+ True
+ 0
+ Max Upload Slots:
+
+
+ 3
+ 4
+ GTK_FILL
+
+
+
+
+
True
True
6
@@ -1826,8 +1779,8 @@
1
2
- 2
- 3
+ 3
+ 4
@@ -1892,6 +1845,7 @@
Stop seed at ratio:
0
True
+
False
@@ -1903,7 +1857,7 @@
True
True
1
- 2 0 999 0.10000000000000001 10 10
+ 2 0 99999 0.10000000000000001 10 10
1
True
@@ -2465,23 +2419,14 @@
10
2
-
- True
- 0
- <i>Current Version:</i>
- True
-
-
- GTK_FILL
-
-
-
-
+
True
1
2
+ 1
+ 2
@@ -2499,17 +2444,26 @@
-
+
True
1
2
- 1
- 2
+
+
+ True
+ 0
+ <i>Current Version:</i>
+ True
+
+
+ GTK_FILL
+
+
diff --git a/deluge/ui/gtkui/options_tab.py b/deluge/ui/gtkui/options_tab.py
index 8a6e0390b..8f27e664e 100644
--- a/deluge/ui/gtkui/options_tab.py
+++ b/deluge/ui/gtkui/options_tab.py
@@ -2,19 +2,19 @@
# options_tab.py
#
# Copyright (C) 2008 Andrew Resch ('andar')
-#
+#
# Deluge is free software.
-#
+#
# You may redistribute it and/or modify it under the terms of the
# GNU General Public License, as published by the Free Software
# Foundation; either version 3 of the License, or (at your option)
# any later version.
-#
+#
# deluge is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU General Public License for more details.
-#
+#
# You should have received a copy of the GNU General Public License
# along with deluge. If not, write to:
# The Free Software Foundation, Inc.,
@@ -39,11 +39,11 @@ class OptionsTab(Tab):
def __init__(self):
Tab.__init__(self)
glade = component.get("MainWindow").get_glade()
-
+
self._name = "Options"
self._child_widget = glade.get_widget("options_tab")
self._tab_label = glade.get_widget("options_tab_label")
-
+
self.spin_max_download = glade.get_widget("spin_max_download")
self.spin_max_upload = glade.get_widget("spin_max_upload")
self.spin_max_connections = glade.get_widget("spin_max_connections")
@@ -57,14 +57,15 @@ class OptionsTab(Tab):
self.chk_move_completed = glade.get_widget("chk_move_completed")
self.filechooser_move_completed = glade.get_widget("filechooser_move_completed")
self.entry_move_completed = glade.get_widget("entry_move_completed")
-
+
self.prev_torrent_id = None
self.prev_status = None
-
+
glade.signal_autoconnect({
"on_button_apply_clicked": self._on_button_apply_clicked,
"on_button_edit_trackers_clicked": self._on_button_edit_trackers_clicked,
- "on_chk_move_completed_toggled": self._on_chk_move_completed_toggled
+ "on_chk_move_completed_toggled": self._on_chk_move_completed_toggled,
+ "on_chk_stop_at_ratio_toggled": self._on_chk_stop_at_ratio_toggled
})
def start(self):
@@ -74,7 +75,7 @@ class OptionsTab(Tab):
else:
self.filechooser_move_completed.hide()
self.entry_move_completed.show()
-
+
def stop(self):
pass
@@ -90,7 +91,7 @@ class OptionsTab(Tab):
# No torrent is selected in the torrentview
self._child_widget.set_sensitive(False)
return
-
+
if torrent_id != self.prev_torrent_id:
self.prev_status = None
@@ -112,13 +113,13 @@ class OptionsTab(Tab):
def clear(self):
self.prev_torrent_id = None
self.prev_status = None
-
+
def _on_get_torrent_status(self, status):
# We only want to update values that have been applied in the core. This
# is so we don't overwrite the user changes that haven't been applied yet.
if self.prev_status == None:
self.prev_status = {}.fromkeys(status.keys(), None)
-
+
if status != self.prev_status:
if status["max_download_speed"] != self.prev_status["max_download_speed"]:
self.spin_max_download.set_value(status["max_download_speed"])
@@ -136,6 +137,8 @@ class OptionsTab(Tab):
self.chk_auto_managed.set_active(status["is_auto_managed"])
if status["stop_at_ratio"] != self.prev_status["stop_at_ratio"]:
self.chk_stop_at_ratio.set_active(status["stop_at_ratio"])
+ self.spin_stop_ratio.set_sensitive(status["stop_at_ratio"])
+ self.chk_remove_at_ratio.set_sensitive(status["stop_at_ratio"])
if status["stop_ratio"] != self.prev_status["stop_ratio"]:
self.spin_stop_ratio.set_value(status["stop_ratio"])
if status["remove_at_ratio"] != self.prev_status["remove_at_ratio"]:
@@ -147,9 +150,9 @@ class OptionsTab(Tab):
self.filechooser_move_completed.set_current_folder(status["move_on_completed_path"])
else:
self.entry_move_completed.set_text(status["move_on_completed_path"])
-
+
self.prev_status = status
-
+
def _on_button_apply_clicked(self, button):
if self.spin_max_download.get_value() != self.prev_status["max_download_speed"]:
client.set_torrent_max_download_speed(self.prev_torrent_id, self.spin_max_download.get_value())
@@ -177,20 +180,26 @@ class OptionsTab(Tab):
else:
path = self.entry_move_completed.get_text()
client.set_torrent_move_on_completed_path(self.prev_torrent_id, path)
-
-
+
+
def _on_button_edit_trackers_clicked(self, button):
from edittrackersdialog import EditTrackersDialog
dialog = EditTrackersDialog(
self.prev_torrent_id,
component.get("MainWindow").window)
dialog.run()
-
+
def _on_chk_move_completed_toggled(self, widget):
value = self.chk_move_completed.get_active()
if client.is_localhost():
widget = self.filechooser_move_completed
else:
widget = self.entry_move_completed
-
+
widget.set_sensitive(value)
+
+ def _on_chk_stop_at_ratio_toggled(self, widget):
+ value = widget.get_active()
+
+ self.spin_stop_ratio.set_sensitive(value)
+ self.chk_remove_at_ratio.set_sensitive(value)