[Xfce4-commits] <eatmonkey:aria2-xml-rpc> Add the advanced settings dialog

Mike Massonnet noreply at xfce.org
Sun Jan 31 15:28:01 CET 2010


Updating branch refs/heads/aria2-xml-rpc
         to ed96366ebca6aeecdb26a74978f658d30c84937e (commit)
       from 1eea45eedd4faf59e41679ad692e597e4f579983 (commit)

commit ed96366ebca6aeecdb26a74978f658d30c84937e
Author: Mike Massonnet <mmassonnet at xfce.org>
Date:   Sun Jan 31 15:22:48 2010 +0100

    Add the advanced settings dialog
    
    The "Edit configuration" button in the advanced tab of the settings
    dialog turns the dialog into a single notebook with a treeview to edit
    the aria2.conf file by hand.

 src/eataria2.rb    |    6 +-
 src/eatsettings.rb |  244 +++++++++-
 src/settings.ui    | 1275 ++++++++++++++++++++++++++++------------------------
 3 files changed, 919 insertions(+), 606 deletions(-)

diff --git a/src/eataria2.rb b/src/eataria2.rb
index adcc38a..e468677 100644
--- a/src/eataria2.rb
+++ b/src/eataria2.rb
@@ -562,8 +562,8 @@ class Eat::Aria2Config
 		begin
 			file = File.open(@filename)
 			while !file.eof and line = file.readline
-				next if line !~ /^([a-zA-Z0-9-]+)=(.*)$/
 				next if line =~ /^daemon=.*$/
+				next if line !~ /^([a-zA-Z0-9-]+)=(.*)$/
 				key = $1
 				val = $2.strip
 				if val == "true"
@@ -601,12 +601,16 @@ class Eat::Aria2Config
 		begin
 			file = File.open(@filename, "w")
 			@values.each do |key,val|
+				if key =~ /^(all-proxy|ca-certificate|certificate|http-proxy|https-proxy|private-key|ftp-proxy|dht-entry-point)$/
+					next if val.empty?
+				end
 				file.puts("#{key}=#{val}")
 			end
 			file.close
 		rescue
 			p $!
 		end
+		parse
 	end
 
 end
diff --git a/src/eatsettings.rb b/src/eatsettings.rb
index 1cd6ec5..9ff5a41 100644
--- a/src/eatsettings.rb
+++ b/src/eatsettings.rb
@@ -3,6 +3,7 @@
 require "gtk2"
 require "singleton"
 
+require "config"
 require "eataria2"
 
 include Gtk
@@ -126,6 +127,7 @@ class Eat::SettingsDialog
 		builder << "settings.ui"
 
 		@dialog = builder["dialog-settings"]
+		@notebook = builder["notebook-settings"]
 		@xmlrpc = Hash.new
 		@xmlrpc[:vbox] = builder["xmlrpc-vbox"]
 		@xmlrpc[:custom_server] = builder["action-custom-server"]
@@ -160,7 +162,7 @@ class Eat::SettingsDialog
 		# Setup actions
 		builder["action-custom-server"].signal_connect("toggled") { action_custom_server }
 
-		# Setup values
+		# Setup basic configuration values
 		@settings = Eat::Settings.instance
 		@xmlrpc[:custom_server].active = @settings["custom-server"]
 		@xmlrpc[:host].text = @settings["xmlrpc-host"] if @settings["xmlrpc-host"] != nil
@@ -182,6 +184,29 @@ class Eat::SettingsDialog
 		@advanced[:listen_port].value = @settings.aria2["listen-port"].to_i
 		@advanced[:enable_upnp].active = @settings["enable-upnp"]
 
+		# Setup advanced configuration treeview
+		@treestore = TreeStore.new(String, String, TrueClass)
+		builder["treeview-configuration"].set_model(@treestore)
+		fill_treestore()
+
+		cell = CellRendererText.new
+		cell.ellipsize = Pango::ELLIPSIZE_END
+		column = builder["treeviewcolumn-option"]
+		column.pack_start(cell, true)
+		column.add_attribute(cell, :text, 0)
+
+		cell = CellRendererText.new
+		cell.ellipsize = Pango::ELLIPSIZE_END
+		column = builder["treeviewcolumn-value"]
+		column.pack_start(cell, true)
+		column.add_attribute(cell, :text, 1)
+		column.add_attribute(cell, :editable, 2)
+		cell.signal_connect("edited") { |this, path, new_text| treestore_update_iter(path, new_text) }
+
+		# Setup navigation between basic/advanced configuration editing
+		builder["button-edit-configuration"].signal_connect("clicked") { switch_configuration(true) }
+		builder["button-back"].signal_connect("clicked") { switch_configuration(false) }
+
 		@dialog.vbox.show_all
 	end
 
@@ -190,17 +215,77 @@ class Eat::SettingsDialog
 	end
 
 	def run()
-		# Run dialog
 		res = @dialog.run
+		update_settings if res == Dialog::RESPONSE_OK
 
-		# Update settings
-		if res == Dialog::RESPONSE_OK
-			@settings["custom-server"] = @xmlrpc[:custom_server].active?
-			@settings["xmlrpc-host"] = @xmlrpc[:host].text
-			@settings["xmlrpc-port"] = @xmlrpc[:port].value_as_int
-			@settings["xmlrpc-user"] = @xmlrpc[:user].text
-			@settings["xmlrpc-passwd"] = @xmlrpc[:passwd].text
-			@settings["enable-upnp"] = @advanced[:enable_upnp].active?
+		begin
+			yield res
+		rescue
+		end
+		@dialog.hide
+
+		res
+	end
+
+	private
+
+	def action_custom_server()
+		active = @xmlrpc[:custom_server].active?
+		@xmlrpc[:vbox].set_sensitive(active)
+		@basic_options[:frame].set_sensitive(!active)
+		@bittorrent[:frame].set_sensitive(!active)
+		@advanced[:vbox].set_sensitive(!active)
+	end
+
+	def switch_configuration(advanced)
+		@notebook.set_page(advanced ? 1 : 0)
+
+		if advanced
+			# Sync treestore with widget values
+			@treeiter["max-concurrent-downloads"].set_value(1, @basic_options[:max_concurrent_downloads].value_as_int.to_s)
+			@treeiter["max-overall-download-limit"].set_value(1, @basic_options[:max_download_speed].value_as_int.to_s)
+			@treeiter["dir"].set_value(1, @basic_options[:download_dir_button].current_folder)
+			@treeiter["max-overall-upload-limit"].set_value(1, @bittorrent[:max_upload_speed].value_as_int.to_s)
+			@treeiter["bt-max-peers"].set_value(1, @bittorrent[:max_peers].value_as_int.to_s)
+			@treeiter["seed-ratio"].set_value(1, @bittorrent[:seed_ratio].value.to_s)
+			@treeiter["enable-dht"].set_value(1, @bittorrent[:enable_dht].active?.to_s)
+			@treeiter["enable-peer-exchange"].set_value(1, @bittorrent[:enable_pex].active?.to_s)
+			@treeiter["bt-require-crypto"].set_value(1, @bittorrent[:require_encryption].active?.to_s)
+			@treeiter["check-certificate"].set_value(1, @advanced[:certificates].active?.to_s)
+			@treeiter["split"].set_value(1, @advanced[:split].value_as_int.to_s)
+			@treeiter["metalink-location"].set_value(1, @advanced[:locations].text)
+			@treeiter["listen-port"].set_value(1, @advanced[:listen_port].value_as_int.to_s)
+		else
+			# Sync widget values with treestore
+			@basic_options[:max_concurrent_downloads].value = @treeiter["max-concurrent-downloads"].get_value(1).to_i
+			@basic_options[:max_download_speed].value = @treeiter["max-overall-download-limit"].get_value(1).to_i
+			@basic_options[:download_dir_button].current_folder = @treeiter["dir"].get_value(1)
+			@bittorrent[:max_upload_speed].value = @treeiter["max-overall-upload-limit"].get_value(1).to_i
+			@bittorrent[:max_peers].value = @treeiter["bt-max-peers"].get_value(1).to_i
+			@bittorrent[:seed_ratio].value = @treeiter["seed-ratio"].get_value(1).to_f
+			@bittorrent[:enable_dht].active = @treeiter["enable-dht"].get_value(1) == "true"
+			@bittorrent[:enable_pex].active = @treeiter["enable-peer-exchange"].get_value(1) == "true"
+			@bittorrent[:require_encryption].active = @treeiter["bt-require-crypto"].get_value(1) == "true"
+			@advanced[:certificates].active = @treeiter["check-certificate"].get_value(1) == "true"
+			@advanced[:split].value = @treeiter["split"].get_value(1).to_i
+			@advanced[:locations].text = @treeiter["metalink-location"].get_value(1)
+			@advanced[:listen_port].value = @treeiter["listen-port"].get_value(1).to_i
+		end
+	end
+
+	def update_settings()
+		@settings["custom-server"] = @xmlrpc[:custom_server].active?
+		@settings["xmlrpc-host"] = @xmlrpc[:host].text
+		@settings["xmlrpc-port"] = @xmlrpc[:port].value_as_int
+		@settings["xmlrpc-user"] = @xmlrpc[:user].text
+		@settings["xmlrpc-passwd"] = @xmlrpc[:passwd].text
+		@settings["enable-upnp"] = @advanced[:enable_upnp].active?
+
+		@treeiter.each do |key, iter|
+			@settings.aria2[key] = iter.get_value(1)
+		end
+
+		if @notebook.page == 0
 			@settings.aria2["max-concurrent-downloads"] = @basic_options[:max_concurrent_downloads].value_as_int
 			@settings.aria2["max-overall-download-limit"] = @basic_options[:max_download_speed].value_as_int
 			@settings.aria2["dir"] = @basic_options[:download_dir_button].current_folder
@@ -214,26 +299,137 @@ class Eat::SettingsDialog
 			@settings.aria2["split"] = @advanced[:split].value_as_int
 			@settings.aria2["metalink-location"] = @advanced[:locations].text
 			@settings.aria2["listen-port"] = @advanced[:listen_port].value_as_int
-			@settings.save
 		end
 
-		begin
-			yield res
-		rescue
-		end
-		@dialog.hide
+		@settings.save
+	end
 
-		res
+	def treestore_append_iter(parent_iter, name)
+		iter = @treestore.append(parent_iter)
+		iter.set_value(0, name)
+		iter.set_value(1, @settings.aria2[name].to_s)
+		iter.set_value(2, true)
+		@treeiter[name] = iter
 	end
 
-	private
+	def treestore_update_iter(path, new_name)
+		iter = @treestore.get_iter(path)
+		iter.set_value(1, new_name)
+	end
 
-	def action_custom_server()
-		active = @xmlrpc[:custom_server].active?
-		@xmlrpc[:vbox].set_sensitive(active)
-		@basic_options[:frame].set_sensitive(!active)
-		@bittorrent[:frame].set_sensitive(!active)
-		@advanced[:vbox].set_sensitive(!active)
+	def fill_treestore()
+		@treeiter = {}
+
+		parent_iter = @treestore.append(nil)
+		parent_iter.set_value(0, "Basic options")
+
+		treestore_append_iter(parent_iter, "dir")
+		treestore_append_iter(parent_iter, "max-concurrent-downloads")
+		treestore_append_iter(parent_iter, "check-integrity")
+
+		parent_iter = @treestore.append(nil)
+		parent_iter.set_value(0, "HTTP/FTP options")
+
+		treestore_append_iter(parent_iter, "all-proxy")
+		treestore_append_iter(parent_iter, "connect-timeout")
+		treestore_append_iter(parent_iter, "lowest-speed-limit")
+		treestore_append_iter(parent_iter, "max-file-not-found")
+		treestore_append_iter(parent_iter, "max-tries")
+		treestore_append_iter(parent_iter, "proxy-method")
+		treestore_append_iter(parent_iter, "remote-time")
+		treestore_append_iter(parent_iter, "split")
+		treestore_append_iter(parent_iter, "timeout")
+
+		parent_iter = @treestore.append(nil)
+		parent_iter.set_value(0, "HTTP options")
+
+		treestore_append_iter(parent_iter, "ca-certificate")
+		treestore_append_iter(parent_iter, "certificate")
+		treestore_append_iter(parent_iter, "check-certificate")
+		treestore_append_iter(parent_iter, "http-auth-challenge")
+		treestore_append_iter(parent_iter, "http-user")
+		treestore_append_iter(parent_iter, "http-passwd")
+		treestore_append_iter(parent_iter, "http-proxy")
+		treestore_append_iter(parent_iter, "https-proxy")
+		treestore_append_iter(parent_iter, "private-key")
+		treestore_append_iter(parent_iter, "referer")
+		treestore_append_iter(parent_iter, "enable-http-keep-alive")
+		treestore_append_iter(parent_iter, "enable-http-pipelining")
+		treestore_append_iter(parent_iter, "header")
+		treestore_append_iter(parent_iter, "load-cookies")
+		treestore_append_iter(parent_iter, "save-cookies")
+		treestore_append_iter(parent_iter, "use-head")
+		treestore_append_iter(parent_iter, "user-agent")
+
+		parent_iter = @treestore.append(nil)
+		parent_iter.set_value(0, "FTP options")
+
+		treestore_append_iter(parent_iter, "ftp-user")
+		treestore_append_iter(parent_iter, "ftp-passwd")
+		treestore_append_iter(parent_iter, "ftp-pasv")
+		treestore_append_iter(parent_iter, "ftp-proxy")
+		treestore_append_iter(parent_iter, "ftp-type")
+		treestore_append_iter(parent_iter, "ftp-reuse-connection")
+
+		parent_iter = @treestore.append(nil)
+		parent_iter.set_value(0, "BitTorrent options")
+
+		treestore_append_iter(parent_iter, "bt-external-ip")
+		treestore_append_iter(parent_iter, "bt-hash-check-seed")
+		treestore_append_iter(parent_iter, "bt-max-open-files")
+		treestore_append_iter(parent_iter, "bt-max-peers")
+		treestore_append_iter(parent_iter, "bt-min-crypto-level")
+		treestore_append_iter(parent_iter, "bt-prioritize-piece")
+		treestore_append_iter(parent_iter, "bt-require-crypto")
+		treestore_append_iter(parent_iter, "bt-request-peer-speed-limit")
+		treestore_append_iter(parent_iter, "bt-save-metadata")
+		treestore_append_iter(parent_iter, "bt-seed-unverified")
+		treestore_append_iter(parent_iter, "bt-stop-timeout")
+		treestore_append_iter(parent_iter, "bt-tracker-interval")
+		treestore_append_iter(parent_iter, "dht-entry-point")
+		treestore_append_iter(parent_iter, "dht-listen-port")
+		treestore_append_iter(parent_iter, "enable-dht")
+		treestore_append_iter(parent_iter, "enable-peer-exchange")
+		treestore_append_iter(parent_iter, "follow-torrent")
+		treestore_append_iter(parent_iter, "listen-port")
+		treestore_append_iter(parent_iter, "max-overall-upload-limit")
+		treestore_append_iter(parent_iter, "max-upload-limit")
+		treestore_append_iter(parent_iter, "peer-id-prefix")
+		treestore_append_iter(parent_iter, "seed-ratio")
+
+		parent_iter = @treestore.append(nil)
+		parent_iter.set_value(0, "Metalink options")
+
+		treestore_append_iter(parent_iter, "follow-metalink")
+		treestore_append_iter(parent_iter, "metalink-servers")
+		treestore_append_iter(parent_iter, "metalink-language")
+		treestore_append_iter(parent_iter, "metalink-location")
+		treestore_append_iter(parent_iter, "metalink-os")
+		treestore_append_iter(parent_iter, "metalink-version")
+		treestore_append_iter(parent_iter, "metalink-preferred-protocol")
+		treestore_append_iter(parent_iter, "metalink-enable-unique-protocol")
+
+		parent_iter = @treestore.append(nil)
+		parent_iter.set_value(0, "Advanced options")
+
+		treestore_append_iter(parent_iter, "allow-overwrite")
+		treestore_append_iter(parent_iter, "allow-piece-length-change")
+		treestore_append_iter(parent_iter, "async-dns")
+		treestore_append_iter(parent_iter, "auto-file-renaming")
+		treestore_append_iter(parent_iter, "auto-save-interval")
+		treestore_append_iter(parent_iter, "enable-direct-io")
+		treestore_append_iter(parent_iter, "file-allocation")
+		treestore_append_iter(parent_iter, "interface")
+		treestore_append_iter(parent_iter, "on-download-complete")
+		treestore_append_iter(parent_iter, "on-download-error")
+		treestore_append_iter(parent_iter, "on-download-start")
+		treestore_append_iter(parent_iter, "on-download-stop")
+		treestore_append_iter(parent_iter, "summary-interval")
+		treestore_append_iter(parent_iter, "force-sequential")
+		treestore_append_iter(parent_iter, "max-overall-download-limit")
+		treestore_append_iter(parent_iter, "max-download-limit")
+		treestore_append_iter(parent_iter, "no-file-allocation-limit")
+		treestore_append_iter(parent_iter, "realtime-chunk-checksum")
 	end
 
 end
diff --git a/src/settings.ui b/src/settings.ui
index b8a8b64..c520ef3 100644
--- a/src/settings.ui
+++ b/src/settings.ui
@@ -4,9 +4,10 @@
   <!-- interface-naming-policy project-wide -->
   <object class="GtkDialog" id="dialog-settings">
     <property name="title" translatable="yes">Settings</property>
-    <property name="resizable">False</property>
     <property name="modal">True</property>
     <property name="window_position">center-on-parent</property>
+    <property name="default_width">375</property>
+    <property name="default_height">405</property>
     <property name="destroy_with_parent">True</property>
     <property name="icon_name">preferences-other</property>
     <property name="type_hint">normal</property>
@@ -19,65 +20,104 @@
         <property name="orientation">vertical</property>
         <property name="spacing">2</property>
         <child>
-          <object class="GtkNotebook" id="notebook1">
+          <object class="GtkNotebook" id="notebook-settings">
             <property name="visible">True</property>
             <property name="can_focus">True</property>
-            <property name="border_width">6</property>
+            <property name="show_tabs">False</property>
             <property name="show_border">False</property>
             <child>
-              <object class="GtkVBox" id="vbox1">
+              <object class="GtkNotebook" id="notebook1">
                 <property name="visible">True</property>
+                <property name="can_focus">True</property>
                 <property name="border_width">6</property>
-                <property name="orientation">vertical</property>
-                <property name="spacing">6</property>
+                <property name="show_border">False</property>
                 <child>
-                  <object class="GtkFrame" id="frame1">
+                  <object class="GtkVBox" id="vbox2">
                     <property name="visible">True</property>
-                    <property name="label_xalign">0</property>
-                    <property name="shadow_type">none</property>
+                    <property name="border_width">6</property>
+                    <property name="orientation">vertical</property>
+                    <property name="spacing">6</property>
                     <child>
-                      <object class="GtkAlignment" id="alignment1">
+                      <object class="GtkFrame" id="frame1">
                         <property name="visible">True</property>
-                        <property name="top_padding">6</property>
-                        <property name="left_padding">12</property>
+                        <property name="label_xalign">0</property>
+                        <property name="shadow_type">none</property>
                         <child>
-                          <object class="GtkVBox" id="vbox2">
+                          <object class="GtkAlignment" id="alignment1">
                             <property name="visible">True</property>
-                            <property name="orientation">vertical</property>
-                            <property name="spacing">6</property>
-                            <child>
-                              <object class="GtkCheckButton" id="checkbutton-custom-server">
-                                <property name="visible">True</property>
-                                <property name="can_focus">True</property>
-                                <property name="receives_default">False</property>
-                                <property name="related_action">action-custom-server</property>
-                                <property name="use_action_appearance">True</property>
-                                <property name="draw_indicator">True</property>
-                              </object>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">0</property>
-                              </packing>
-                            </child>
+                            <property name="top_padding">6</property>
+                            <property name="left_padding">12</property>
                             <child>
-                              <object class="GtkAlignment" id="xmlrpc-alignment">
+                              <object class="GtkVBox" id="vbox3">
                                 <property name="visible">True</property>
-                                <property name="left_padding">12</property>
+                                <property name="orientation">vertical</property>
+                                <property name="spacing">6</property>
                                 <child>
-                                  <object class="GtkVBox" id="xmlrpc-vbox">
+                                  <object class="GtkCheckButton" id="checkbutton-custom-server">
+                                    <property name="label" translatable="yes">Connect to custom server</property>
                                     <property name="visible">True</property>
-                                    <property name="sensitive">False</property>
-                                    <property name="orientation">vertical</property>
-                                    <property name="spacing">6</property>
+                                    <property name="can_focus">True</property>
+                                    <property name="receives_default">False</property>
+                                    <property name="use_action_appearance">True</property>
+                                    <property name="related_action">action-custom-server</property>
+                                    <property name="use_underline">True</property>
+                                    <property name="draw_indicator">True</property>
+                                  </object>
+                                  <packing>
+                                    <property name="expand">False</property>
+                                    <property name="fill">False</property>
+                                    <property name="position">0</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <object class="GtkAlignment" id="xmlrpc-alignment">
+                                    <property name="visible">True</property>
+                                    <property name="left_padding">12</property>
                                     <child>
-                                      <object class="GtkHBox" id="hbox1">
+                                      <object class="GtkVBox" id="xmlrpc-vbox">
                                         <property name="visible">True</property>
-                                        <property name="spacing">4</property>
+                                        <property name="sensitive">False</property>
+                                        <property name="orientation">vertical</property>
+                                        <property name="spacing">6</property>
                                         <child>
-                                          <object class="GtkLabel" id="label3">
+                                          <object class="GtkHBox" id="hbox1">
                                             <property name="visible">True</property>
-                                            <property name="label" translatable="yes">Host:</property>
+                                            <property name="spacing">4</property>
+                                            <child>
+                                              <object class="GtkLabel" id="label3">
+                                                <property name="visible">True</property>
+                                                <property name="label" translatable="yes">Host:</property>
+                                              </object>
+                                              <packing>
+                                                <property name="expand">False</property>
+                                                <property name="fill">False</property>
+                                                <property name="position">0</property>
+                                              </packing>
+                                            </child>
+                                            <child>
+                                              <object class="GtkEntry" id="xmlrpc-host">
+                                                <property name="visible">True</property>
+                                                <property name="can_focus">True</property>
+                                                <property name="invisible_char">&#x2022;</property>
+                                              </object>
+                                              <packing>
+                                                <property name="position">1</property>
+                                              </packing>
+                                            </child>
+                                            <child>
+                                              <object class="GtkSpinButton" id="xmlrpc-port">
+                                                <property name="visible">True</property>
+                                                <property name="can_focus">True</property>
+                                                <property name="max_length">5</property>
+                                                <property name="invisible_char">&#x2022;</property>
+                                                <property name="adjustment">adjustment1</property>
+                                              </object>
+                                              <packing>
+                                                <property name="expand">False</property>
+                                                <property name="fill">False</property>
+                                                <property name="position">2</property>
+                                              </packing>
+                                            </child>
                                           </object>
                                           <packing>
                                             <property name="expand">False</property>
@@ -86,54 +126,40 @@
                                           </packing>
                                         </child>
                                         <child>
-                                          <object class="GtkEntry" id="xmlrpc-host">
+                                          <object class="GtkExpander" id="expander1">
                                             <property name="visible">True</property>
                                             <property name="can_focus">True</property>
-                                            <property name="invisible_char">&#x2022;</property>
-                                          </object>
-                                          <packing>
-                                            <property name="position">1</property>
-                                          </packing>
-                                        </child>
-                                        <child>
-                                          <object class="GtkSpinButton" id="xmlrpc-port">
-                                            <property name="visible">True</property>
-                                            <property name="can_focus">True</property>
-                                            <property name="max_length">5</property>
-                                            <property name="invisible_char">&#x2022;</property>
-                                            <property name="adjustment">adjustment1</property>
-                                          </object>
-                                          <packing>
-                                            <property name="expand">False</property>
-                                            <property name="fill">False</property>
-                                            <property name="position">2</property>
-                                          </packing>
-                                        </child>
-                                      </object>
-                                      <packing>
-                                        <property name="expand">False</property>
-                                        <property name="fill">False</property>
-                                        <property name="position">0</property>
-                                      </packing>
-                                    </child>
-                                    <child>
-                                      <object class="GtkExpander" id="expander1">
-                                        <property name="visible">True</property>
-                                        <property name="can_focus">True</property>
-                                        <property name="spacing">6</property>
-                                        <child>
-                                          <object class="GtkVBox" id="vbox3">
-                                            <property name="visible">True</property>
-                                            <property name="orientation">vertical</property>
                                             <property name="spacing">6</property>
                                             <child>
-                                              <object class="GtkHBox" id="hbox2">
+                                              <object class="GtkVBox" id="vbox4">
                                                 <property name="visible">True</property>
-                                                <property name="spacing">4</property>
+                                                <property name="orientation">vertical</property>
+                                                <property name="spacing">6</property>
                                                 <child>
-                                                  <object class="GtkLabel" id="label4">
+                                                  <object class="GtkHBox" id="hbox2">
                                                     <property name="visible">True</property>
-                                                    <property name="label" translatable="yes">Username:</property>
+                                                    <property name="spacing">4</property>
+                                                    <child>
+                                                      <object class="GtkLabel" id="label4">
+                                                        <property name="visible">True</property>
+                                                        <property name="label" translatable="yes">Username:</property>
+                                                      </object>
+                                                      <packing>
+                                                        <property name="expand">False</property>
+                                                        <property name="fill">False</property>
+                                                        <property name="position">0</property>
+                                                      </packing>
+                                                    </child>
+                                                    <child>
+                                                      <object class="GtkEntry" id="xmlrpc-user">
+                                                        <property name="visible">True</property>
+                                                        <property name="can_focus">True</property>
+                                                        <property name="invisible_char">&#x2022;</property>
+                                                      </object>
+                                                      <packing>
+                                                        <property name="position">1</property>
+                                                      </packing>
+                                                    </child>
                                                   </object>
                                                   <packing>
                                                     <property name="expand">False</property>
@@ -142,120 +168,275 @@
                                                   </packing>
                                                 </child>
                                                 <child>
-                                                  <object class="GtkEntry" id="xmlrpc-user">
+                                                  <object class="GtkHBox" id="hbox3">
                                                     <property name="visible">True</property>
-                                                    <property name="can_focus">True</property>
-                                                    <property name="invisible_char">&#x2022;</property>
+                                                    <property name="spacing">4</property>
+                                                    <child>
+                                                      <object class="GtkLabel" id="label5">
+                                                        <property name="visible">True</property>
+                                                        <property name="label" translatable="yes">Password:</property>
+                                                      </object>
+                                                      <packing>
+                                                        <property name="expand">False</property>
+                                                        <property name="fill">False</property>
+                                                        <property name="position">0</property>
+                                                      </packing>
+                                                    </child>
+                                                    <child>
+                                                      <object class="GtkEntry" id="xmlrpc-passwd">
+                                                        <property name="visible">True</property>
+                                                        <property name="can_focus">True</property>
+                                                        <property name="visibility">False</property>
+                                                        <property name="invisible_char">&#x2022;</property>
+                                                      </object>
+                                                      <packing>
+                                                        <property name="position">1</property>
+                                                      </packing>
+                                                    </child>
                                                   </object>
                                                   <packing>
+                                                    <property name="expand">False</property>
+                                                    <property name="fill">False</property>
                                                     <property name="position">1</property>
                                                   </packing>
                                                 </child>
                                               </object>
-                                              <packing>
-                                                <property name="expand">False</property>
-                                                <property name="fill">False</property>
-                                                <property name="position">0</property>
-                                              </packing>
                                             </child>
-                                            <child>
-                                              <object class="GtkHBox" id="hbox3">
+                                            <child type="label">
+                                              <object class="GtkLabel" id="label6">
                                                 <property name="visible">True</property>
-                                                <property name="spacing">4</property>
-                                                <child>
-                                                  <object class="GtkLabel" id="label5">
-                                                    <property name="visible">True</property>
-                                                    <property name="label" translatable="yes">Password:</property>
-                                                  </object>
-                                                  <packing>
-                                                    <property name="expand">False</property>
-                                                    <property name="fill">False</property>
-                                                    <property name="position">0</property>
-                                                  </packing>
-                                                </child>
-                                                <child>
-                                                  <object class="GtkEntry" id="xmlrpc-passwd">
-                                                    <property name="visible">True</property>
-                                                    <property name="can_focus">True</property>
-                                                    <property name="visibility">False</property>
-                                                    <property name="invisible_char">&#x2022;</property>
-                                                  </object>
-                                                  <packing>
-                                                    <property name="position">1</property>
-                                                  </packing>
-                                                </child>
+                                                <property name="label" translatable="yes">Authentication</property>
                                               </object>
-                                              <packing>
-                                                <property name="expand">False</property>
-                                                <property name="fill">False</property>
-                                                <property name="position">1</property>
-                                              </packing>
                                             </child>
                                           </object>
-                                        </child>
-                                        <child type="label">
-                                          <object class="GtkLabel" id="label6">
-                                            <property name="visible">True</property>
-                                            <property name="label" translatable="yes">Authentication</property>
-                                          </object>
+                                          <packing>
+                                            <property name="position">1</property>
+                                          </packing>
                                         </child>
                                       </object>
-                                      <packing>
-                                        <property name="position">1</property>
-                                      </packing>
                                     </child>
                                   </object>
+                                  <packing>
+                                    <property name="expand">False</property>
+                                    <property name="fill">False</property>
+                                    <property name="position">1</property>
+                                  </packing>
                                 </child>
                               </object>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">1</property>
-                              </packing>
                             </child>
                           </object>
                         </child>
+                        <child type="label">
+                          <object class="GtkLabel" id="label2">
+                            <property name="visible">True</property>
+                            <property name="label" translatable="yes">aria2 XML-RPC Server</property>
+                            <attributes>
+                              <attribute name="weight" value="bold"/>
+                            </attributes>
+                          </object>
+                        </child>
                       </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">False</property>
+                        <property name="position">0</property>
+                      </packing>
                     </child>
-                    <child type="label">
-                      <object class="GtkLabel" id="label2">
+                    <child>
+                      <object class="GtkFrame" id="basic-options-frame">
                         <property name="visible">True</property>
-                        <property name="label" translatable="yes">aria2 XML-RPC Server</property>
-                        <attributes>
-                          <attribute name="weight" value="bold"/>
-                        </attributes>
+                        <property name="label_xalign">0</property>
+                        <property name="shadow_type">none</property>
+                        <child>
+                          <object class="GtkAlignment" id="alignment2">
+                            <property name="visible">True</property>
+                            <property name="top_padding">6</property>
+                            <property name="left_padding">12</property>
+                            <child>
+                              <object class="GtkVBox" id="basic-options-vbox">
+                                <property name="visible">True</property>
+                                <property name="orientation">vertical</property>
+                                <property name="spacing">6</property>
+                                <child>
+                                  <object class="GtkHBox" id="hbox4">
+                                    <property name="visible">True</property>
+                                    <property name="spacing">4</property>
+                                    <child>
+                                      <object class="GtkLabel" id="label8">
+                                        <property name="visible">True</property>
+                                        <property name="label" translatable="yes">Maximum number of concurrent downloads:</property>
+                                      </object>
+                                      <packing>
+                                        <property name="expand">False</property>
+                                        <property name="fill">False</property>
+                                        <property name="position">0</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkSpinButton" id="max-concurrent-downloads">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="invisible_char">&#x2022;</property>
+                                        <property name="adjustment">adjustment2</property>
+                                      </object>
+                                      <packing>
+                                        <property name="expand">False</property>
+                                        <property name="fill">False</property>
+                                        <property name="position">1</property>
+                                      </packing>
+                                    </child>
+                                  </object>
+                                  <packing>
+                                    <property name="position">0</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <object class="GtkHBox" id="hbox6">
+                                    <property name="visible">True</property>
+                                    <property name="spacing">4</property>
+                                    <child>
+                                      <object class="GtkLabel" id="label11">
+                                        <property name="visible">True</property>
+                                        <property name="label" translatable="yes">Maximum download speed:</property>
+                                      </object>
+                                      <packing>
+                                        <property name="expand">False</property>
+                                        <property name="fill">False</property>
+                                        <property name="position">0</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkSpinButton" id="max-download-speed">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="invisible_char">&#x2022;</property>
+                                        <property name="adjustment">adjustment-max-download-speed</property>
+                                        <property name="numeric">True</property>
+                                      </object>
+                                      <packing>
+                                        <property name="expand">False</property>
+                                        <property name="fill">False</property>
+                                        <property name="position">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkLabel" id="label13">
+                                        <property name="visible">True</property>
+                                        <property name="label" translatable="yes">KiB/s</property>
+                                      </object>
+                                      <packing>
+                                        <property name="expand">False</property>
+                                        <property name="fill">False</property>
+                                        <property name="position">2</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkLabel" id="label20">
+                                        <property name="visible">True</property>
+                                        <property name="label" translatable="yes">(0=infinite)</property>
+                                        <attributes>
+                                          <attribute name="size" value="7500"/>
+                                        </attributes>
+                                      </object>
+                                      <packing>
+                                        <property name="expand">False</property>
+                                        <property name="fill">False</property>
+                                        <property name="position">3</property>
+                                      </packing>
+                                    </child>
+                                  </object>
+                                  <packing>
+                                    <property name="position">1</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <object class="GtkHBox" id="hbox5">
+                                    <property name="visible">True</property>
+                                    <property name="spacing">4</property>
+                                    <child>
+                                      <object class="GtkLabel" id="label9">
+                                        <property name="visible">True</property>
+                                        <property name="label" translatable="yes">Download directory:</property>
+                                      </object>
+                                      <packing>
+                                        <property name="expand">False</property>
+                                        <property name="fill">False</property>
+                                        <property name="position">0</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkFileChooserButton" id="download-dir-button">
+                                        <property name="visible">True</property>
+                                        <property name="action">select-folder</property>
+                                        <property name="create_folders">False</property>
+                                        <property name="width_chars">14</property>
+                                      </object>
+                                      <packing>
+                                        <property name="expand">False</property>
+                                        <property name="fill">False</property>
+                                        <property name="position">1</property>
+                                      </packing>
+                                    </child>
+                                  </object>
+                                  <packing>
+                                    <property name="position">2</property>
+                                  </packing>
+                                </child>
+                              </object>
+                            </child>
+                          </object>
+                        </child>
+                        <child type="label">
+                          <object class="GtkLabel" id="label7">
+                            <property name="visible">True</property>
+                            <property name="label" translatable="yes">Download Options</property>
+                            <attributes>
+                              <attribute name="weight" value="bold"/>
+                            </attributes>
+                          </object>
+                        </child>
                       </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">False</property>
+                        <property name="position">1</property>
+                      </packing>
                     </child>
                   </object>
+                </child>
+                <child type="tab">
+                  <object class="GtkLabel" id="label1">
+                    <property name="visible">True</property>
+                    <property name="label" translatable="yes">General</property>
+                  </object>
                   <packing>
-                    <property name="expand">False</property>
-                    <property name="fill">False</property>
-                    <property name="position">0</property>
+                    <property name="tab_fill">False</property>
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkFrame" id="basic-options-frame">
+                  <object class="GtkFrame" id="bittorrent-frame">
                     <property name="visible">True</property>
+                    <property name="border_width">6</property>
                     <property name="label_xalign">0</property>
                     <property name="shadow_type">none</property>
                     <child>
-                      <object class="GtkAlignment" id="alignment2">
+                      <object class="GtkAlignment" id="alignment4">
                         <property name="visible">True</property>
                         <property name="top_padding">6</property>
                         <property name="left_padding">12</property>
                         <child>
-                          <object class="GtkVBox" id="basic-options-vbox">
+                          <object class="GtkVBox" id="vbox5">
                             <property name="visible">True</property>
                             <property name="orientation">vertical</property>
                             <property name="spacing">6</property>
                             <child>
-                              <object class="GtkHBox" id="hbox4">
+                              <object class="GtkHBox" id="hbox7">
                                 <property name="visible">True</property>
                                 <property name="spacing">4</property>
                                 <child>
-                                  <object class="GtkLabel" id="label8">
+                                  <object class="GtkLabel" id="label12">
                                     <property name="visible">True</property>
-                                    <property name="label" translatable="yes">Maximum number of concurrent downloads:</property>
+                                    <property name="label" translatable="yes">Maximum upload speed:</property>
                                   </object>
                                   <packing>
                                     <property name="expand">False</property>
@@ -264,11 +445,12 @@
                                   </packing>
                                 </child>
                                 <child>
-                                  <object class="GtkSpinButton" id="max-concurrent-downloads">
+                                  <object class="GtkSpinButton" id="max-upload-speed">
                                     <property name="visible">True</property>
                                     <property name="can_focus">True</property>
                                     <property name="invisible_char">&#x2022;</property>
-                                    <property name="adjustment">adjustment2</property>
+                                    <property name="adjustment">adjustment-max-upload-speed</property>
+                                    <property name="numeric">True</property>
                                   </object>
                                   <packing>
                                     <property name="expand">False</property>
@@ -276,19 +458,46 @@
                                     <property name="position">1</property>
                                   </packing>
                                 </child>
+                                <child>
+                                  <object class="GtkLabel" id="label14">
+                                    <property name="visible">True</property>
+                                    <property name="label" translatable="yes">KiB/s</property>
+                                  </object>
+                                  <packing>
+                                    <property name="expand">False</property>
+                                    <property name="fill">False</property>
+                                    <property name="position">2</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <object class="GtkLabel" id="label19">
+                                    <property name="visible">True</property>
+                                    <property name="label" translatable="yes">(0=infinite)</property>
+                                    <attributes>
+                                      <attribute name="size" value="7500"/>
+                                    </attributes>
+                                  </object>
+                                  <packing>
+                                    <property name="expand">False</property>
+                                    <property name="fill">False</property>
+                                    <property name="position">3</property>
+                                  </packing>
+                                </child>
                               </object>
                               <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">False</property>
                                 <property name="position">0</property>
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkHBox" id="hbox6">
+                              <object class="GtkHBox" id="hbox9">
                                 <property name="visible">True</property>
                                 <property name="spacing">4</property>
                                 <child>
-                                  <object class="GtkLabel" id="label11">
+                                  <object class="GtkLabel" id="label17">
                                     <property name="visible">True</property>
-                                    <property name="label" translatable="yes">Maximum download speed:</property>
+                                    <property name="label" translatable="yes">Maximum number of peers:</property>
                                   </object>
                                   <packing>
                                     <property name="expand">False</property>
@@ -297,12 +506,11 @@
                                   </packing>
                                 </child>
                                 <child>
-                                  <object class="GtkSpinButton" id="max-download-speed">
+                                  <object class="GtkSpinButton" id="max-peers">
                                     <property name="visible">True</property>
                                     <property name="can_focus">True</property>
                                     <property name="invisible_char">&#x2022;</property>
-                                    <property name="adjustment">adjustment-max-download-speed</property>
-                                    <property name="numeric">True</property>
+                                    <property name="adjustment">adjustment-max-peers</property>
                                   </object>
                                   <packing>
                                     <property name="expand">False</property>
@@ -311,18 +519,7 @@
                                   </packing>
                                 </child>
                                 <child>
-                                  <object class="GtkLabel" id="label13">
-                                    <property name="visible">True</property>
-                                    <property name="label" translatable="yes">KiB/s</property>
-                                  </object>
-                                  <packing>
-                                    <property name="expand">False</property>
-                                    <property name="fill">False</property>
-                                    <property name="position">2</property>
-                                  </packing>
-                                </child>
-                                <child>
-                                  <object class="GtkLabel" id="label20">
+                                  <object class="GtkLabel" id="label18">
                                     <property name="visible">True</property>
                                     <property name="label" translatable="yes">(0=infinite)</property>
                                     <attributes>
@@ -332,22 +529,24 @@
                                   <packing>
                                     <property name="expand">False</property>
                                     <property name="fill">False</property>
-                                    <property name="position">3</property>
+                                    <property name="position">2</property>
                                   </packing>
                                 </child>
                               </object>
                               <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">False</property>
                                 <property name="position">1</property>
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkHBox" id="hbox5">
+                              <object class="GtkHBox" id="hbox8">
                                 <property name="visible">True</property>
                                 <property name="spacing">4</property>
                                 <child>
-                                  <object class="GtkLabel" id="label9">
+                                  <object class="GtkLabel" id="label10">
                                     <property name="visible">True</property>
-                                    <property name="label" translatable="yes">Download directory:</property>
+                                    <property name="label" translatable="yes">Seed ratio:</property>
                                   </object>
                                   <packing>
                                     <property name="expand">False</property>
@@ -356,11 +555,12 @@
                                   </packing>
                                 </child>
                                 <child>
-                                  <object class="GtkFileChooserButton" id="download-dir-button">
+                                  <object class="GtkSpinButton" id="seed-ratio">
                                     <property name="visible">True</property>
-                                    <property name="action">select-folder</property>
-                                    <property name="create_folders">False</property>
-                                    <property name="width_chars">14</property>
+                                    <property name="can_focus">True</property>
+                                    <property name="invisible_char">&#x2022;</property>
+                                    <property name="adjustment">adjustment-seed-ratio</property>
+                                    <property name="digits">2</property>
                                   </object>
                                   <packing>
                                     <property name="expand">False</property>
@@ -368,91 +568,20 @@
                                     <property name="position">1</property>
                                   </packing>
                                 </child>
-                              </object>
-                              <packing>
-                                <property name="position">2</property>
-                              </packing>
-                            </child>
-                          </object>
-                        </child>
-                      </object>
-                    </child>
-                    <child type="label">
-                      <object class="GtkLabel" id="label7">
-                        <property name="visible">True</property>
-                        <property name="label" translatable="yes">Download Options</property>
-                        <attributes>
-                          <attribute name="weight" value="bold"/>
-                        </attributes>
-                      </object>
-                    </child>
-                  </object>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="fill">False</property>
-                    <property name="position">1</property>
-                  </packing>
-                </child>
-              </object>
-            </child>
-            <child type="tab">
-              <object class="GtkLabel" id="label1">
-                <property name="visible">True</property>
-                <property name="label" translatable="yes">General</property>
-              </object>
-              <packing>
-                <property name="tab_fill">False</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkFrame" id="bittorrent-frame">
-                <property name="visible">True</property>
-                <property name="border_width">6</property>
-                <property name="label_xalign">0</property>
-                <property name="shadow_type">none</property>
-                <child>
-                  <object class="GtkAlignment" id="alignment4">
-                    <property name="visible">True</property>
-                    <property name="top_padding">6</property>
-                    <property name="left_padding">12</property>
-                    <child>
-                      <object class="GtkVBox" id="vbox5">
-                        <property name="visible">True</property>
-                        <property name="orientation">vertical</property>
-                        <property name="spacing">6</property>
-                        <child>
-                          <object class="GtkHBox" id="hbox7">
-                            <property name="visible">True</property>
-                            <property name="spacing">4</property>
-                            <child>
-                              <object class="GtkLabel" id="label12">
-                                <property name="visible">True</property>
-                                <property name="label" translatable="yes">Maximum upload speed:</property>
-                              </object>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">0</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <object class="GtkSpinButton" id="max-upload-speed">
-                                <property name="visible">True</property>
-                                <property name="can_focus">True</property>
-                                <property name="invisible_char">&#x2022;</property>
-                                <property name="adjustment">adjustment-max-upload-speed</property>
-                                <property name="numeric">True</property>
-                              </object>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">1</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <object class="GtkLabel" id="label14">
-                                <property name="visible">True</property>
-                                <property name="label" translatable="yes">KiB/s</property>
+                                <child>
+                                  <object class="GtkLabel" id="label21">
+                                    <property name="visible">True</property>
+                                    <property name="label" translatable="yes">(0=infinite)</property>
+                                    <attributes>
+                                      <attribute name="size" value="7500"/>
+                                    </attributes>
+                                  </object>
+                                  <packing>
+                                    <property name="expand">False</property>
+                                    <property name="fill">False</property>
+                                    <property name="position">2</property>
+                                  </packing>
+                                </child>
                               </object>
                               <packing>
                                 <property name="expand">False</property>
@@ -461,261 +590,125 @@
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkLabel" id="label19">
+                              <object class="GtkHSeparator" id="hseparator1">
                                 <property name="visible">True</property>
-                                <property name="label" translatable="yes">(0=infinite)</property>
-                                <attributes>
-                                  <attribute name="size" value="7500"/>
-                                </attributes>
                               </object>
                               <packing>
                                 <property name="expand">False</property>
-                                <property name="fill">False</property>
                                 <property name="position">3</property>
                               </packing>
                             </child>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">0</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkHBox" id="hbox9">
-                            <property name="visible">True</property>
-                            <property name="spacing">4</property>
                             <child>
-                              <object class="GtkLabel" id="label17">
+                              <object class="GtkCheckButton" id="enable-dht">
+                                <property name="label" translatable="yes">Enable DHT (Distributed Hash Table)</property>
                                 <property name="visible">True</property>
-                                <property name="label" translatable="yes">Maximum number of peers:</property>
+                                <property name="can_focus">True</property>
+                                <property name="receives_default">False</property>
+                                <property name="tooltip_text" translatable="yes">Distributed Hash Table allows to use torrents without a working tracker</property>
+                                <property name="draw_indicator">True</property>
                               </object>
                               <packing>
                                 <property name="expand">False</property>
                                 <property name="fill">False</property>
-                                <property name="position">0</property>
+                                <property name="position">4</property>
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkSpinButton" id="max-peers">
+                              <object class="GtkCheckButton" id="enable-pex">
+                                <property name="label" translatable="yes">Enable PEX (Peer Exchange)</property>
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
-                                <property name="invisible_char">&#x2022;</property>
-                                <property name="adjustment">adjustment-max-peers</property>
+                                <property name="receives_default">False</property>
+                                <property name="tooltip_text" translatable="yes">Peer Exchange helps finding more peers through connected peers</property>
+                                <property name="draw_indicator">True</property>
                               </object>
                               <packing>
                                 <property name="expand">False</property>
                                 <property name="fill">False</property>
-                                <property name="position">1</property>
+                                <property name="position">5</property>
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkLabel" id="label18">
+                              <object class="GtkHSeparator" id="hseparator2">
                                 <property name="visible">True</property>
-                                <property name="label" translatable="yes">(0=infinite)</property>
-                                <attributes>
-                                  <attribute name="size" value="7500"/>
-                                </attributes>
                               </object>
                               <packing>
                                 <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">2</property>
-                              </packing>
-                            </child>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">1</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkHBox" id="hbox8">
-                            <property name="visible">True</property>
-                            <property name="spacing">4</property>
-                            <child>
-                              <object class="GtkLabel" id="label10">
-                                <property name="visible">True</property>
-                                <property name="label" translatable="yes">Seed ratio:</property>
-                              </object>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">0</property>
+                                <property name="position">6</property>
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkSpinButton" id="seed-ratio">
+                              <object class="GtkCheckButton" id="require-encryption">
+                                <property name="label" translatable="yes">Always require encryption</property>
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
-                                <property name="invisible_char">&#x2022;</property>
-                                <property name="adjustment">adjustment-seed-ratio</property>
-                                <property name="digits">2</property>
-                              </object>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">1</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <object class="GtkLabel" id="label21">
-                                <property name="visible">True</property>
-                                <property name="label" translatable="yes">(0=infinite)</property>
-                                <attributes>
-                                  <attribute name="size" value="7500"/>
-                                </attributes>
+                                <property name="receives_default">False</property>
+                                <property name="draw_indicator">True</property>
                               </object>
                               <packing>
                                 <property name="expand">False</property>
                                 <property name="fill">False</property>
-                                <property name="position">2</property>
+                                <property name="position">7</property>
                               </packing>
                             </child>
                           </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">2</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkHSeparator" id="hseparator1">
-                            <property name="visible">True</property>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="position">3</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkCheckButton" id="enable-dht">
-                            <property name="label" translatable="yes">Enable DHT (Distributed Hash Table)</property>
-                            <property name="visible">True</property>
-                            <property name="can_focus">True</property>
-                            <property name="receives_default">False</property>
-                            <property name="tooltip_text" translatable="yes">Distributed Hash Table allows to use torrents without a working tracker</property>
-                            <property name="draw_indicator">True</property>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">4</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkCheckButton" id="enable-pex">
-                            <property name="label" translatable="yes">Enable PEX (Peer Exchange)</property>
-                            <property name="visible">True</property>
-                            <property name="can_focus">True</property>
-                            <property name="receives_default">False</property>
-                            <property name="tooltip_text" translatable="yes">Peer Exchange helps finding more peers through connected peers</property>
-                            <property name="draw_indicator">True</property>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">5</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkHSeparator" id="hseparator2">
-                            <property name="visible">True</property>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="position">6</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkCheckButton" id="require-encryption">
-                            <property name="label" translatable="yes">Always require encryption</property>
-                            <property name="visible">True</property>
-                            <property name="can_focus">True</property>
-                            <property name="receives_default">False</property>
-                            <property name="draw_indicator">True</property>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">7</property>
-                          </packing>
                         </child>
                       </object>
                     </child>
+                    <child type="label">
+                      <object class="GtkLabel" id="label16">
+                        <property name="visible">True</property>
+                        <property name="label" translatable="yes">BitTorrent</property>
+                        <property name="use_markup">True</property>
+                        <attributes>
+                          <attribute name="weight" value="bold"/>
+                        </attributes>
+                      </object>
+                    </child>
                   </object>
+                  <packing>
+                    <property name="position">1</property>
+                  </packing>
                 </child>
-                <child type="label">
-                  <object class="GtkLabel" id="label16">
+                <child type="tab">
+                  <object class="GtkLabel" id="label15">
                     <property name="visible">True</property>
                     <property name="label" translatable="yes">BitTorrent</property>
-                    <property name="use_markup">True</property>
-                    <attributes>
-                      <attribute name="weight" value="bold"/>
-                    </attributes>
                   </object>
+                  <packing>
+                    <property name="position">1</property>
+                    <property name="tab_fill">False</property>
+                  </packing>
                 </child>
-              </object>
-              <packing>
-                <property name="position">1</property>
-              </packing>
-            </child>
-            <child type="tab">
-              <object class="GtkLabel" id="label15">
-                <property name="visible">True</property>
-                <property name="label" translatable="yes">BitTorrent</property>
-              </object>
-              <packing>
-                <property name="position">1</property>
-                <property name="tab_fill">False</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkVBox" id="advanced-vbox">
-                <property name="visible">True</property>
-                <property name="border_width">6</property>
-                <property name="orientation">vertical</property>
-                <property name="spacing">6</property>
                 <child>
-                  <object class="GtkFrame" id="frame2">
+                  <object class="GtkVBox" id="advanced-vbox">
                     <property name="visible">True</property>
-                    <property name="label_xalign">0</property>
-                    <property name="shadow_type">none</property>
+                    <property name="border_width">6</property>
+                    <property name="orientation">vertical</property>
+                    <property name="spacing">6</property>
                     <child>
-                      <object class="GtkAlignment" id="alignment3">
+                      <object class="GtkFrame" id="frame2">
                         <property name="visible">True</property>
-                        <property name="top_padding">6</property>
-                        <property name="left_padding">12</property>
+                        <property name="label_xalign">0</property>
+                        <property name="shadow_type">none</property>
                         <child>
-                          <object class="GtkVBox" id="vbox6">
+                          <object class="GtkAlignment" id="alignment3">
                             <property name="visible">True</property>
-                            <property name="orientation">vertical</property>
-                            <property name="spacing">6</property>
+                            <property name="top_padding">6</property>
+                            <property name="left_padding">12</property>
                             <child>
-                              <object class="GtkCheckButton" id="certificates">
-                                <property name="label" translatable="yes">Check HTTPS certificates</property>
+                              <object class="GtkVBox" id="vbox6">
                                 <property name="visible">True</property>
-                                <property name="can_focus">True</property>
-                                <property name="receives_default">False</property>
-                                <property name="active">True</property>
-                                <property name="draw_indicator">True</property>
-                              </object>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">0</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <object class="GtkHBox" id="hbox12">
-                                <property name="visible">True</property>
-                                <property name="tooltip_text" translatable="yes">Number of connections to open for one file to download</property>
-                                <property name="spacing">4</property>
+                                <property name="orientation">vertical</property>
+                                <property name="spacing">6</property>
                                 <child>
-                                  <object class="GtkLabel" id="label25">
+                                  <object class="GtkCheckButton" id="certificates">
+                                    <property name="label" translatable="yes">Check HTTPS certificates</property>
                                     <property name="visible">True</property>
-                                    <property name="label" translatable="yes">Number of fragmentation:</property>
+                                    <property name="can_focus">True</property>
+                                    <property name="receives_default">False</property>
+                                    <property name="active">True</property>
+                                    <property name="draw_indicator">True</property>
                                   </object>
                                   <packing>
                                     <property name="expand">False</property>
@@ -724,11 +717,34 @@
                                   </packing>
                                 </child>
                                 <child>
-                                  <object class="GtkSpinButton" id="split">
+                                  <object class="GtkHBox" id="hbox12">
                                     <property name="visible">True</property>
-                                    <property name="can_focus">True</property>
-                                    <property name="invisible_char">&#x2022;</property>
-                                    <property name="adjustment">adjustment-split</property>
+                                    <property name="tooltip_text" translatable="yes">Number of connections to open for one file to download</property>
+                                    <property name="spacing">4</property>
+                                    <child>
+                                      <object class="GtkLabel" id="label25">
+                                        <property name="visible">True</property>
+                                        <property name="label" translatable="yes">Number of fragmentation:</property>
+                                      </object>
+                                      <packing>
+                                        <property name="expand">False</property>
+                                        <property name="fill">False</property>
+                                        <property name="position">0</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkSpinButton" id="split">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="invisible_char">&#x2022;</property>
+                                        <property name="adjustment">adjustment-split</property>
+                                      </object>
+                                      <packing>
+                                        <property name="expand">False</property>
+                                        <property name="fill">False</property>
+                                        <property name="position">1</property>
+                                      </packing>
+                                    </child>
                                   </object>
                                   <packing>
                                     <property name="expand">False</property>
@@ -736,92 +752,105 @@
                                     <property name="position">1</property>
                                   </packing>
                                 </child>
-                              </object>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">1</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <object class="GtkHBox" id="hbox13">
-                                <property name="visible">True</property>
-                                <property name="tooltip_text" translatable="yes">List of country codes separated by commas like JP,US to use for Metalink</property>
-                                <property name="spacing">4</property>
-                                <child>
-                                  <object class="GtkLabel" id="label26">
-                                    <property name="visible">True</property>
-                                    <property name="label" translatable="yes">Preferred locations:</property>
-                                  </object>
-                                  <packing>
-                                    <property name="expand">False</property>
-                                    <property name="fill">False</property>
-                                    <property name="position">0</property>
-                                  </packing>
-                                </child>
                                 <child>
-                                  <object class="GtkEntry" id="locations">
+                                  <object class="GtkHBox" id="hbox13">
                                     <property name="visible">True</property>
-                                    <property name="can_focus">True</property>
-                                    <property name="invisible_char">&#x2022;</property>
-                                    <property name="width_chars">8</property>
+                                    <property name="tooltip_text" translatable="yes">List of country codes separated by commas like JP,US to use for Metalink</property>
+                                    <property name="spacing">4</property>
+                                    <child>
+                                      <object class="GtkLabel" id="label26">
+                                        <property name="visible">True</property>
+                                        <property name="label" translatable="yes">Preferred locations:</property>
+                                      </object>
+                                      <packing>
+                                        <property name="expand">False</property>
+                                        <property name="fill">False</property>
+                                        <property name="position">0</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkEntry" id="locations">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="invisible_char">&#x2022;</property>
+                                        <property name="width_chars">8</property>
+                                      </object>
+                                      <packing>
+                                        <property name="expand">False</property>
+                                        <property name="fill">False</property>
+                                        <property name="position">1</property>
+                                      </packing>
+                                    </child>
                                   </object>
                                   <packing>
                                     <property name="expand">False</property>
                                     <property name="fill">False</property>
-                                    <property name="position">1</property>
+                                    <property name="position">2</property>
                                   </packing>
                                 </child>
                               </object>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">2</property>
-                              </packing>
                             </child>
                           </object>
                         </child>
+                        <child type="label">
+                          <object class="GtkLabel" id="label23">
+                            <property name="visible">True</property>
+                            <property name="label" translatable="yes">Advanced Download Options</property>
+                            <attributes>
+                              <attribute name="weight" value="bold"/>
+                            </attributes>
+                          </object>
+                        </child>
                       </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">False</property>
+                        <property name="position">0</property>
+                      </packing>
                     </child>
-                    <child type="label">
-                      <object class="GtkLabel" id="label23">
-                        <property name="visible">True</property>
-                        <property name="label" translatable="yes">Advanced Download Options</property>
-                        <attributes>
-                          <attribute name="weight" value="bold"/>
-                        </attributes>
-                      </object>
-                    </child>
-                  </object>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="fill">False</property>
-                    <property name="position">0</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkFrame" id="frame3">
-                    <property name="visible">True</property>
-                    <property name="label_xalign">0</property>
-                    <property name="shadow_type">none</property>
                     <child>
-                      <object class="GtkAlignment" id="alignment5">
+                      <object class="GtkFrame" id="frame3">
                         <property name="visible">True</property>
-                        <property name="top_padding">6</property>
-                        <property name="left_padding">12</property>
+                        <property name="label_xalign">0</property>
+                        <property name="shadow_type">none</property>
                         <child>
-                          <object class="GtkVBox" id="vbox7">
+                          <object class="GtkAlignment" id="alignment5">
                             <property name="visible">True</property>
-                            <property name="orientation">vertical</property>
-                            <property name="spacing">6</property>
+                            <property name="top_padding">6</property>
+                            <property name="left_padding">12</property>
                             <child>
-                              <object class="GtkHBox" id="hbox10">
+                              <object class="GtkVBox" id="vbox7">
                                 <property name="visible">True</property>
-                                <property name="spacing">4</property>
+                                <property name="orientation">vertical</property>
+                                <property name="spacing">6</property>
                                 <child>
-                                  <object class="GtkLabel" id="label24">
+                                  <object class="GtkHBox" id="hbox10">
                                     <property name="visible">True</property>
-                                    <property name="label" translatable="yes">Listen port:</property>
+                                    <property name="spacing">4</property>
+                                    <child>
+                                      <object class="GtkLabel" id="label24">
+                                        <property name="visible">True</property>
+                                        <property name="label" translatable="yes">Listen port:</property>
+                                      </object>
+                                      <packing>
+                                        <property name="expand">False</property>
+                                        <property name="fill">False</property>
+                                        <property name="position">0</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkSpinButton" id="listen-port">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="invisible_char">&#x2022;</property>
+                                        <property name="adjustment">adjustment-listen-port</property>
+                                      </object>
+                                      <packing>
+                                        <property name="expand">False</property>
+                                        <property name="fill">False</property>
+                                        <property name="position">1</property>
+                                      </packing>
+                                    </child>
                                   </object>
                                   <packing>
                                     <property name="expand">False</property>
@@ -830,11 +859,13 @@
                                   </packing>
                                 </child>
                                 <child>
-                                  <object class="GtkSpinButton" id="listen-port">
+                                  <object class="GtkCheckButton" id="enable-upnp">
+                                    <property name="label" translatable="yes">Negociate automatic port redirection with UPnP</property>
                                     <property name="visible">True</property>
+                                    <property name="sensitive">False</property>
                                     <property name="can_focus">True</property>
-                                    <property name="invisible_char">&#x2022;</property>
-                                    <property name="adjustment">adjustment-listen-port</property>
+                                    <property name="receives_default">False</property>
+                                    <property name="draw_indicator">True</property>
                                   </object>
                                   <packing>
                                     <property name="expand">False</property>
@@ -843,88 +874,170 @@
                                   </packing>
                                 </child>
                               </object>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">0</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <object class="GtkCheckButton" id="enable-upnp">
-                                <property name="label" translatable="yes">Negociate automatic port redirection with UPnP</property>
-                                <property name="visible">True</property>
-                                <property name="sensitive">False</property>
-                                <property name="can_focus">True</property>
-                                <property name="receives_default">False</property>
-                                <property name="draw_indicator">True</property>
-                              </object>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">1</property>
-                              </packing>
                             </child>
                           </object>
                         </child>
+                        <child type="label">
+                          <object class="GtkLabel" id="label27">
+                            <property name="visible">True</property>
+                            <property name="label" translatable="yes">Network</property>
+                            <attributes>
+                              <attribute name="weight" value="bold"/>
+                            </attributes>
+                          </object>
+                        </child>
                       </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">False</property>
+                        <property name="position">2</property>
+                      </packing>
                     </child>
-                    <child type="label">
-                      <object class="GtkLabel" id="label27">
+                    <child>
+                      <object class="GtkHBox" id="hbox11">
                         <property name="visible">True</property>
-                        <property name="label" translatable="yes">Network</property>
-                        <attributes>
-                          <attribute name="weight" value="bold"/>
-                        </attributes>
+                        <child>
+                          <object class="GtkButton" id="button-edit-configuration">
+                            <property name="label" translatable="yes">Edit configuration</property>
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="receives_default">True</property>
+                            <property name="image">image1</property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">False</property>
+                            <property name="pack_type">end</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
                       </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">False</property>
+                        <property name="pack_type">end</property>
+                        <property name="position">1</property>
+                      </packing>
                     </child>
                   </object>
                   <packing>
-                    <property name="expand">False</property>
-                    <property name="fill">False</property>
                     <property name="position">2</property>
                   </packing>
                 </child>
+                <child type="tab">
+                  <object class="GtkLabel" id="label22">
+                    <property name="visible">True</property>
+                    <property name="label" translatable="yes">Advanced</property>
+                  </object>
+                  <packing>
+                    <property name="position">2</property>
+                    <property name="tab_fill">False</property>
+                  </packing>
+                </child>
+              </object>
+            </child>
+            <child type="tab">
+              <placeholder/>
+            </child>
+            <child>
+              <object class="GtkNotebook" id="notebook2">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="border_width">6</property>
+                <property name="show_tabs">False</property>
                 <child>
-                  <object class="GtkHBox" id="hbox11">
+                  <object class="GtkVBox" id="vbox1">
                     <property name="visible">True</property>
+                    <property name="orientation">vertical</property>
                     <child>
-                      <object class="GtkButton" id="button3">
-                        <property name="label" translatable="yes">Edit configuration</property>
+                      <object class="GtkScrolledWindow" id="scrolledwindow1">
                         <property name="visible">True</property>
-                        <property name="sensitive">False</property>
                         <property name="can_focus">True</property>
-                        <property name="receives_default">True</property>
-                        <property name="image">image1</property>
+                        <property name="hscrollbar_policy">automatic</property>
+                        <property name="vscrollbar_policy">automatic</property>
+                        <property name="shadow_type">in</property>
+                        <child>
+                          <object class="GtkTreeView" id="treeview-configuration">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="search_column">0</property>
+                            <child>
+                              <object class="GtkTreeViewColumn" id="treeviewcolumn-option">
+                                <property name="resizable">True</property>
+                                <property name="title">Option</property>
+                                <property name="expand">True</property>
+                              </object>
+                            </child>
+                            <child>
+                              <object class="GtkTreeViewColumn" id="treeviewcolumn-value">
+                                <property name="resizable">True</property>
+                                <property name="title">Value</property>
+                                <property name="expand">True</property>
+                              </object>
+                            </child>
+                          </object>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkHBox" id="hbox14">
+                        <property name="visible">True</property>
+                        <property name="border_width">6</property>
+                        <child>
+                          <object class="GtkButton" id="button-back">
+                            <property name="label">gtk-go-back</property>
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="receives_default">True</property>
+                            <property name="use_stock">True</property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">False</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
                       </object>
                       <packing>
                         <property name="expand">False</property>
                         <property name="fill">False</property>
                         <property name="pack_type">end</property>
-                        <property name="position">0</property>
+                        <property name="position">1</property>
                       </packing>
                     </child>
                   </object>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="fill">False</property>
-                    <property name="pack_type">end</property>
-                    <property name="position">1</property>
-                  </packing>
+                </child>
+                <child type="tab">
+                  <placeholder/>
+                </child>
+                <child>
+                  <placeholder/>
+                </child>
+                <child type="tab">
+                  <placeholder/>
+                </child>
+                <child>
+                  <placeholder/>
+                </child>
+                <child type="tab">
+                  <placeholder/>
                 </child>
               </object>
               <packing>
-                <property name="position">2</property>
+                <property name="position">1</property>
               </packing>
             </child>
             <child type="tab">
-              <object class="GtkLabel" id="label22">
-                <property name="visible">True</property>
-                <property name="label" translatable="yes">Advanced</property>
-              </object>
-              <packing>
-                <property name="position">2</property>
-                <property name="tab_fill">False</property>
-              </packing>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child type="tab">
+              <placeholder/>
             </child>
           </object>
           <packing>
@@ -1016,10 +1129,6 @@
     <property name="step_increment">5</property>
     <property name="page_increment">10</property>
   </object>
-  <object class="GtkImage" id="image1">
-    <property name="visible">True</property>
-    <property name="stock">gtk-edit</property>
-  </object>
   <object class="GtkAdjustment" id="adjustment-split">
     <property name="value">5</property>
     <property name="lower">1</property>
@@ -1034,4 +1143,8 @@
     <property name="step_increment">1</property>
     <property name="page_increment">10</property>
   </object>
+  <object class="GtkImage" id="image1">
+    <property name="visible">True</property>
+    <property name="stock">gtk-edit</property>
+  </object>
 </interface>



More information about the Xfce4-commits mailing list