GTKUI: New path chooser to handle remote paths and store favorite paths

This commit is contained in:
bendikro 2013-05-17 19:06:00 +01:00 committed by Calum Lind
parent 42f5cc382d
commit 1596475db2
15 changed files with 3434 additions and 818 deletions

View File

@ -48,6 +48,7 @@ import twisted.web.client
import twisted.web.error import twisted.web.error
from deluge.httpdownloader import download_file from deluge.httpdownloader import download_file
from deluge import path_chooser_common
import deluge.configmanager import deluge.configmanager
import deluge.common import deluge.common
@ -858,6 +859,13 @@ class Core(component.Component):
""" """
return lt.version return lt.version
@export
def get_completion_paths(self, value, hidden_files=False):
"""
Returns the available path completions for the input value.
"""
return path_chooser_common.get_completion_paths(value, hidden_files)
@export(AUTH_LEVEL_ADMIN) @export(AUTH_LEVEL_ADMIN)
def get_known_accounts(self): def get_known_accounts(self):
return self.authmanager.get_known_accounts() return self.authmanager.get_known_accounts()

View File

@ -101,6 +101,13 @@ DEFAULT_PREFS = {
"auto_managed": True, "auto_managed": True,
"move_completed": False, "move_completed": False,
"move_completed_path": deluge.common.get_default_download_dir(), "move_completed_path": deluge.common.get_default_download_dir(),
"move_completed_paths_list": [],
"download_location_paths_list": [],
"path_chooser_show_chooser_button_on_localhost": True,
"path_chooser_auto_complete_enabled": True,
"path_chooser_accelerator_string": "Tab",
"path_chooser_max_popup_rows": 20,
"path_chooser_show_hidden_files": False,
"new_release_check": True, "new_release_check": True,
"proxies": { "proxies": {
"peer": { "peer": {

View File

@ -0,0 +1,103 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# path_chooser_common.py
#
# Copyright (C) 2013 Bro <bro.development@gmail.com>
#
# Deluge is free software.
#
# You may redistribute it and/or modify it under the terms of the
# GNU General Public License, as published by the Free Software
# Foundation; either version 3 of the License, or (at your option)
# any later version.
#
# deluge is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with deluge. If not, write to:
# The Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor
# Boston, MA 02110-1301, USA.
#
# In addition, as a special exception, the copyright holders give
# permission to link the code of portions of this program with the OpenSSL
# library.
# You must obey the GNU General Public License in all respects for all of
# the code used other than OpenSSL. If you modify file(s) with this
# exception, you may extend this exception to your version of the file(s),
# but you are not obligated to do so. If you do not wish to do so, delete
# this exception statement from your version. If you delete this exception
# statement from all source files in the program, then also delete it here.
#
import os
def get_resource(filename):
import deluge
return deluge.common.resource_filename("deluge.ui.gtkui", os.path.join("glade", filename))
def is_hidden(filepath):
def has_hidden_attribute(filepath):
import win32api, win32con
try:
attribute = win32api.GetFileAttributes(filepath)
return attribute & (win32con.FILE_ATTRIBUTE_HIDDEN | win32con.FILE_ATTRIBUTE_SYSTEM)
except (AttributeError, AssertionError):
return False
name = os.path.basename(os.path.abspath(filepath))
# Windows
if os.name== 'nt':
return has_hidden_attribute(filepath)
return name.startswith('.')
def get_completion_paths(path_value, hidden_files=False):
"""
Takes a path value and returns the available completions.
If the path_value is a valid path, return all sub-directories.
If the path_value is not a valid path, remove the basename from the
path and return all sub-directories of path that start with basename.
:param path_value: path to complete
:type path_value: string
:returns: a sorted list of available completions for the input value
:rtype: list
"""
def get_subdirs(dirname):
try:
return os.walk(dirname).next()[1]
except StopIteration:
# Invalid dirname
return []
dirname = os.path.dirname(path_value)
basename = os.path.basename(path_value)
dirs = get_subdirs(dirname)
# No completions available
if not dirs:
return []
# path_value ends with path separator so
# we only want all the subdirectories
if not basename:
# Lets remove hidden files
if not hidden_files:
old_dirs = dirs
dirs = []
for d in old_dirs:
if not is_hidden(os.path.join(dirname, d)):
dirs.append(d)
matching_dirs = []
for s in dirs:
if s.startswith(basename):
p = os.path.join(dirname, s)
if not p.endswith(os.path.sep):
p += os.path.sep
matching_dirs.append(p)
return sorted(matching_dirs)

View File

@ -55,6 +55,8 @@ import deluge.ui.common
import dialogs import dialogs
import common import common
from deluge.ui.gtkui.path_chooser import PathChooser
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
class AddTorrentDialog(component.Component): class AddTorrentDialog(component.Component):
@ -144,6 +146,9 @@ class AddTorrentDialog(component.Component):
self.listview_torrents.get_selection().connect("changed", self.listview_torrents.get_selection().connect("changed",
self._on_torrent_changed) self._on_torrent_changed)
self.setup_move_completed_path_chooser()
self.setup_download_location_path_chooser()
# Get default config values from the core # Get default config values from the core
self.core_keys = [ self.core_keys = [
"compact_allocation", "compact_allocation",
@ -153,13 +158,15 @@ class AddTorrentDialog(component.Component):
"max_download_speed_per_torrent", "max_download_speed_per_torrent",
"prioritize_first_last_pieces", "prioritize_first_last_pieces",
"sequential_download", "sequential_download",
"download_location",
"add_paused", "add_paused",
"download_location",
"download_location_paths_list",
"move_completed", "move_completed",
"move_completed_path" "move_completed_path",
"move_completed_paths_list",
] ]
#self.core_keys += self.move_completed_path_chooser.get_config_keys()
self.core_config = {} self.core_config = {}
self.builder.get_object("notebook1").connect("switch-page", self._on_switch_page) self.builder.get_object("notebook1").connect("switch-page", self._on_switch_page)
def start(self): def start(self):
@ -169,17 +176,6 @@ class AddTorrentDialog(component.Component):
return self.update_core_config(True, focus) return self.update_core_config(True, focus)
def _show(self, focus=False): def _show(self, focus=False):
if client.is_localhost():
self.builder.get_object("button_location").show()
self.builder.get_object("entry_download_path").hide()
self.builder.get_object("button_move_completed_location").show()
self.builder.get_object("entry_move_completed_path").hide()
else:
self.builder.get_object("button_location").hide()
self.builder.get_object("entry_download_path").show()
self.builder.get_object("button_move_completed_location").hide()
self.builder.get_object("entry_move_completed_path").show()
if component.get("MainWindow").is_on_active_workspace(): if component.get("MainWindow").is_on_active_workspace():
self.dialog.set_transient_for(component.get("MainWindow").window) self.dialog.set_transient_for(component.get("MainWindow").window)
else: else:
@ -374,6 +370,23 @@ class AddTorrentDialog(component.Component):
ret += value[1]["size"] ret += value[1]["size"]
return ret return ret
def load_path_choosers_data(self):
self.move_completed_path_chooser.set_text(self.core_config["move_completed_path"], cursor_end=False, default_text=True)
self.download_location_path_chooser.set_text(self.core_config["download_location"], cursor_end=False, default_text=True)
self.builder.get_object("chk_move_completed").set_active(self.core_config["move_completed"])
def setup_move_completed_path_chooser(self):
self.move_completed_hbox = self.builder.get_object("hbox_move_completed_chooser")
self.move_completed_path_chooser = PathChooser("move_completed_paths_list")
self.move_completed_hbox.add(self.move_completed_path_chooser)
self.move_completed_hbox.show_all()
def setup_download_location_path_chooser(self):
self.download_location_hbox = self.builder.get_object("hbox_download_location_chooser")
self.download_location_path_chooser = PathChooser("download_location_paths_list")
self.download_location_hbox.add(self.download_location_path_chooser)
self.download_location_hbox.show_all()
def update_torrent_options(self, torrent_id): def update_torrent_options(self, torrent_id):
if torrent_id not in self.options: if torrent_id not in self.options:
self.set_default_options() self.set_default_options()
@ -381,16 +394,8 @@ class AddTorrentDialog(component.Component):
options = self.options[torrent_id] options = self.options[torrent_id]
if client.is_localhost(): self.download_location_path_chooser.set_text(options["download_location"], cursor_end=True)
self.builder.get_object("button_location").set_current_folder( self.move_completed_path_chooser.set_text(options["move_completed_path"], cursor_end=True)
options["download_location"])
self.builder.get_object("button_move_completed_location").set_current_folder(
options["move_completed_path"])
else:
self.builder.get_object("entry_download_path").set_text(
options["download_location"])
self.builder.get_object("entry_move_completed_path").set_text(
options["move_completed_path"])
self.builder.get_object("radio_full").set_active( self.builder.get_object("radio_full").set_active(
not options["compact_allocation"]) not options["compact_allocation"])
@ -430,18 +435,10 @@ class AddTorrentDialog(component.Component):
else: else:
options = {} options = {}
if client.is_localhost(): options["download_location"] = self.download_location_path_chooser.get_text()
options["download_location"] = \ options["move_completed_path"] = self.move_completed_path_chooser.get_text()
self.builder.get_object("button_location").get_filename() options["compact_allocation"] = self.builder.get_object("radio_compact").get_active()
options["move_completed_path"] = \ options["move_completed"] = self.builder.get_object("chk_move_completed").get_active()
self.builder.get_object("button_move_completed_location").get_filename()
else:
options["download_location"] = \
self.builder.get_object("entry_download_path").get_text()
options["move_completed_path"] = \
self.builder.get_object("entry_move_completed_path").get_text()
options["compact_allocation"] = \
self.builder.get_object("radio_compact").get_active()
if options["compact_allocation"]: if options["compact_allocation"]:
# We need to make sure all the files are set to download # We need to make sure all the files are set to download
@ -491,16 +488,7 @@ class AddTorrentDialog(component.Component):
return priorities return priorities
def set_default_options(self): def set_default_options(self):
if client.is_localhost(): self.load_path_choosers_data()
self.builder.get_object("button_location").set_current_folder(
self.core_config["download_location"])
self.builder.get_object("button_move_completed_location").set_current_folder(
self.core_config["move_completed_path"])
else:
self.builder.get_object("entry_download_path").set_text(
self.core_config["download_location"])
self.builder.get_object("entry_move_completed_path").set_text(
self.core_config["move_completed_path"])
self.builder.get_object("radio_compact").set_active( self.builder.get_object("radio_compact").set_active(
self.core_config["compact_allocation"]) self.core_config["compact_allocation"])
@ -814,7 +802,6 @@ class AddTorrentDialog(component.Component):
options) options)
row = self.torrent_liststore.iter_next(row) row = self.torrent_liststore.iter_next(row)
self.hide() self.hide()
def _on_button_apply_clicked(self, widget): def _on_button_apply_clicked(self, widget):
@ -847,8 +834,7 @@ class AddTorrentDialog(component.Component):
def _on_chk_move_completed_toggled(self, widget): def _on_chk_move_completed_toggled(self, widget):
value = widget.get_active() value = widget.get_active()
self.builder.get_object("button_move_completed_location").set_sensitive(value) self.move_completed_path_chooser.set_sensitive(value)
self.builder.get_object("entry_move_completed_path").set_sensitive(value)
def _on_delete_event(self, widget, event): def _on_delete_event(self, widget, event):
self.hide() self.hide()

View File

@ -311,7 +311,6 @@ class ConnectionManager(component.Component):
# Return if the deferred callback was done after the dialog was closed # Return if the deferred callback was done after the dialog was closed
if not self.running: if not self.running:
return return
row = self.__get_host_row(host_id) row = self.__get_host_row(host_id)
def on_info(info, c): def on_info(info, c):
if not self.running: if not self.running:

View File

@ -1,6 +1,6 @@
<?xml version="1.0"?> <?xml version="1.0" encoding="UTF-8"?>
<interface> <interface>
<requires lib="gtk+" version="2.16"/> <requires lib="gtk+" version="2.24"/>
<!-- interface-naming-policy toplevel-contextual --> <!-- interface-naming-policy toplevel-contextual -->
<object class="GtkAdjustment" id="adjustment1"> <object class="GtkAdjustment" id="adjustment1">
<property name="lower">-1</property> <property name="lower">-1</property>
@ -27,6 +27,7 @@
<property name="page_increment">10</property> <property name="page_increment">10</property>
</object> </object>
<object class="GtkDialog" id="dialog_add_torrent"> <object class="GtkDialog" id="dialog_add_torrent">
<property name="can_focus">False</property>
<property name="border_width">5</property> <property name="border_width">5</property>
<property name="title" translatable="yes">Add Torrents</property> <property name="title" translatable="yes">Add Torrents</property>
<property name="window_position">center-on-parent</property> <property name="window_position">center-on-parent</property>
@ -35,6 +36,7 @@
<child internal-child="vbox"> <child internal-child="vbox">
<object class="GtkVBox" id="dialog-vbox1"> <object class="GtkVBox" id="dialog-vbox1">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">2</property> <property name="spacing">2</property>
<child> <child>
<object class="GtkVPaned" id="vpaned1"> <object class="GtkVPaned" id="vpaned1">
@ -43,17 +45,20 @@
<child> <child>
<object class="GtkFrame" id="frame2"> <object class="GtkFrame" id="frame2">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label_xalign">0</property> <property name="label_xalign">0</property>
<property name="shadow_type">none</property> <property name="shadow_type">none</property>
<child> <child>
<object class="GtkAlignment" id="alignment2"> <object class="GtkAlignment" id="alignment2">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="top_padding">5</property> <property name="top_padding">5</property>
<property name="left_padding">12</property> <property name="left_padding">12</property>
<property name="right_padding">12</property> <property name="right_padding">12</property>
<child> <child>
<object class="GtkVBox" id="vbox2"> <object class="GtkVBox" id="vbox2">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<child> <child>
<object class="GtkScrolledWindow" id="scrolledwindow1"> <object class="GtkScrolledWindow" id="scrolledwindow1">
<property name="visible">True</property> <property name="visible">True</property>
@ -71,27 +76,32 @@
</child> </child>
</object> </object>
<packing> <packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property> <property name="position">0</property>
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkHButtonBox" id="hbuttonbox1"> <object class="GtkHButtonBox" id="hbuttonbox1">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="layout_style">center</property> <property name="layout_style">center</property>
<child> <child>
<object class="GtkButton" id="button_file"> <object class="GtkButton" id="button_file">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="receives_default">True</property> <property name="receives_default">True</property>
<signal name="clicked" handler="on_button_file_clicked"/> <signal name="clicked" handler="on_button_file_clicked" swapped="no"/>
<child> <child>
<object class="GtkHBox" id="hbox3"> <object class="GtkHBox" id="hbox3">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="border_width">2</property> <property name="border_width">2</property>
<property name="spacing">4</property> <property name="spacing">4</property>
<child> <child>
<object class="GtkImage" id="image3"> <object class="GtkImage" id="image3">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-open</property> <property name="stock">gtk-open</property>
<property name="icon-size">1</property> <property name="icon-size">1</property>
</object> </object>
@ -104,6 +114,7 @@
<child> <child>
<object class="GtkLabel" id="label3"> <object class="GtkLabel" id="label3">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">_File</property> <property name="label" translatable="yes">_File</property>
<property name="use_underline">True</property> <property name="use_underline">True</property>
</object> </object>
@ -127,15 +138,17 @@
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="receives_default">True</property> <property name="receives_default">True</property>
<signal name="clicked" handler="on_button_url_clicked"/> <signal name="clicked" handler="on_button_url_clicked" swapped="no"/>
<child> <child>
<object class="GtkHBox" id="hbox4"> <object class="GtkHBox" id="hbox4">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="border_width">2</property> <property name="border_width">2</property>
<property name="spacing">4</property> <property name="spacing">4</property>
<child> <child>
<object class="GtkImage" id="image4"> <object class="GtkImage" id="image4">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-network</property> <property name="stock">gtk-network</property>
<property name="icon-size">1</property> <property name="icon-size">1</property>
</object> </object>
@ -148,6 +161,7 @@
<child> <child>
<object class="GtkLabel" id="label4"> <object class="GtkLabel" id="label4">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">_URL</property> <property name="label" translatable="yes">_URL</property>
<property name="use_underline">True</property> <property name="use_underline">True</property>
</object> </object>
@ -171,15 +185,17 @@
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="receives_default">True</property> <property name="receives_default">True</property>
<signal name="clicked" handler="on_button_hash_clicked"/> <signal name="clicked" handler="on_button_hash_clicked" swapped="no"/>
<child> <child>
<object class="GtkHBox" id="hbox5"> <object class="GtkHBox" id="hbox5">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="border_width">2</property> <property name="border_width">2</property>
<property name="spacing">4</property> <property name="spacing">4</property>
<child> <child>
<object class="GtkImage" id="image5"> <object class="GtkImage" id="image5">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-revert-to-saved</property> <property name="stock">gtk-revert-to-saved</property>
<property name="icon-size">1</property> <property name="icon-size">1</property>
</object> </object>
@ -192,6 +208,7 @@
<child> <child>
<object class="GtkLabel" id="label5"> <object class="GtkLabel" id="label5">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Info_hash</property> <property name="label" translatable="yes">Info_hash</property>
<property name="use_underline">True</property> <property name="use_underline">True</property>
</object> </object>
@ -215,14 +232,16 @@
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="receives_default">True</property> <property name="receives_default">True</property>
<signal name="clicked" handler="on_button_remove_clicked"/> <signal name="clicked" handler="on_button_remove_clicked" swapped="no"/>
<child> <child>
<object class="GtkHBox" id="hbox2"> <object class="GtkHBox" id="hbox2">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">4</property> <property name="spacing">4</property>
<child> <child>
<object class="GtkImage" id="image2"> <object class="GtkImage" id="image2">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-remove</property> <property name="stock">gtk-remove</property>
</object> </object>
<packing> <packing>
@ -234,6 +253,7 @@
<child> <child>
<object class="GtkLabel" id="label2"> <object class="GtkLabel" id="label2">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">_Remove</property> <property name="label" translatable="yes">_Remove</property>
<property name="use_underline">True</property> <property name="use_underline">True</property>
</object> </object>
@ -266,6 +286,7 @@
<child type="label"> <child type="label">
<object class="GtkLabel" id="label7"> <object class="GtkLabel" id="label7">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Torrents</property> <property name="label" translatable="yes">Torrents</property>
<attributes> <attributes>
<attribute name="weight" value="bold"/> <attribute name="weight" value="bold"/>
@ -304,22 +325,29 @@
<child type="tab"> <child type="tab">
<object class="GtkHBox" id="hbox11"> <object class="GtkHBox" id="hbox11">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<child> <child>
<object class="GtkImage" id="image9"> <object class="GtkImage" id="image9">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-open</property> <property name="stock">gtk-open</property>
</object> </object>
<packing> <packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property> <property name="position">0</property>
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkLabel" id="label8"> <object class="GtkLabel" id="label8">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Fi_les</property> <property name="label" translatable="yes">Fi_les</property>
<property name="use_underline">True</property> <property name="use_underline">True</property>
</object> </object>
<packing> <packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="padding">5</property> <property name="padding">5</property>
<property name="position">1</property> <property name="position">1</property>
</packing> </packing>
@ -332,41 +360,28 @@
<child> <child>
<object class="GtkVBox" id="vbox3"> <object class="GtkVBox" id="vbox3">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="border_width">5</property> <property name="border_width">5</property>
<property name="spacing">5</property> <property name="spacing">5</property>
<child> <child>
<object class="GtkFrame" id="frame7"> <object class="GtkFrame" id="frame7">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label_xalign">0</property> <property name="label_xalign">0</property>
<property name="shadow_type">none</property> <property name="shadow_type">none</property>
<child> <child>
<object class="GtkAlignment" id="alignment7"> <object class="GtkAlignment" id="alignment7">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="top_padding">5</property> <property name="top_padding">5</property>
<property name="left_padding">5</property> <property name="left_padding">5</property>
<property name="right_padding">5</property> <property name="right_padding">5</property>
<child> <child>
<object class="GtkHBox" id="hbox14"> <object class="GtkHBox" id="hbox_download_location_chooser">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<child> <child>
<object class="GtkFileChooserButton" id="button_location"> <placeholder/>
<property name="action">select-folder</property>
<property name="title" translatable="yes">Select A Folder</property>
</object>
<packing>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="entry_download_path">
<property name="can_focus">True</property>
<property name="truncate_multiline">True</property>
<property name="primary_icon_sensitive">True</property>
<property name="secondary_icon_sensitive">True</property>
</object>
<packing>
<property name="position">1</property>
</packing>
</child> </child>
</object> </object>
</child> </child>
@ -375,6 +390,7 @@
<child type="label"> <child type="label">
<object class="GtkLabel" id="label17"> <object class="GtkLabel" id="label17">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Download Location</property> <property name="label" translatable="yes">Download Location</property>
<attributes> <attributes>
<attribute name="weight" value="bold"/> <attribute name="weight" value="bold"/>
@ -391,53 +407,36 @@
<child> <child>
<object class="GtkFrame" id="frame1"> <object class="GtkFrame" id="frame1">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label_xalign">0</property> <property name="label_xalign">0</property>
<property name="shadow_type">none</property> <property name="shadow_type">none</property>
<child> <child>
<object class="GtkAlignment" id="alignment8"> <object class="GtkAlignment" id="alignment8">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="top_padding">5</property> <property name="top_padding">5</property>
<property name="left_padding">5</property> <property name="left_padding">5</property>
<property name="right_padding">5</property> <property name="right_padding">5</property>
<child> <child>
<object class="GtkHBox" id="hbox1"> <object class="GtkHBox" id="hbox_move_completed_chooser">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<child> <child>
<object class="GtkCheckButton" id="chk_move_completed"> <object class="GtkCheckButton" id="chk_move_completed">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="receives_default">False</property> <property name="receives_default">False</property>
<property name="draw_indicator">True</property> <property name="draw_indicator">True</property>
<signal name="toggled" handler="on_chk_move_completed_toggled"/> <signal name="toggled" handler="on_chk_move_completed_toggled" swapped="no"/>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property> <property name="position">0</property>
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkFileChooserButton" id="button_move_completed_location"> <placeholder/>
<property name="sensitive">False</property>
<property name="show_hidden">True</property>
<property name="action">select-folder</property>
<property name="title" translatable="yes">Select A Folder</property>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="entry_move_completed_path">
<property name="sensitive">False</property>
<property name="can_focus">True</property>
<property name="invisible_char">&#x25CF;</property>
<property name="truncate_multiline">True</property>
<property name="primary_icon_sensitive">True</property>
<property name="secondary_icon_sensitive">True</property>
</object>
<packing>
<property name="position">2</property>
</packing>
</child> </child>
</object> </object>
</child> </child>
@ -446,6 +445,7 @@
<child type="label"> <child type="label">
<object class="GtkLabel" id="label1"> <object class="GtkLabel" id="label1">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Move Complete Location</property> <property name="label" translatable="yes">Move Complete Location</property>
<attributes> <attributes>
<attribute name="weight" value="bold"/> <attribute name="weight" value="bold"/>
@ -462,20 +462,24 @@
<child> <child>
<object class="GtkHBox" id="hbox6"> <object class="GtkHBox" id="hbox6">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">10</property> <property name="spacing">10</property>
<child> <child>
<object class="GtkFrame" id="frame4"> <object class="GtkFrame" id="frame4">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label_xalign">0</property> <property name="label_xalign">0</property>
<property name="shadow_type">none</property> <property name="shadow_type">none</property>
<child> <child>
<object class="GtkAlignment" id="alignment4"> <object class="GtkAlignment" id="alignment4">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="top_padding">5</property> <property name="top_padding">5</property>
<property name="left_padding">12</property> <property name="left_padding">12</property>
<child> <child>
<object class="GtkVBox" id="vbox4"> <object class="GtkVBox" id="vbox4">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<child> <child>
<object class="GtkRadioButton" id="radio_full"> <object class="GtkRadioButton" id="radio_full">
<property name="label" translatable="yes">Full</property> <property name="label" translatable="yes">Full</property>
@ -484,7 +488,7 @@
<property name="receives_default">False</property> <property name="receives_default">False</property>
<property name="active">True</property> <property name="active">True</property>
<property name="draw_indicator">True</property> <property name="draw_indicator">True</property>
<signal name="toggled" handler="on_alocation_toggled"/> <signal name="toggled" handler="on_alocation_toggled" swapped="no"/>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
@ -500,7 +504,7 @@
<property name="receives_default">False</property> <property name="receives_default">False</property>
<property name="draw_indicator">True</property> <property name="draw_indicator">True</property>
<property name="group">radio_full</property> <property name="group">radio_full</property>
<signal name="toggled" handler="on_alocation_toggled"/> <signal name="toggled" handler="on_alocation_toggled" swapped="no"/>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
@ -515,6 +519,7 @@
<child type="label"> <child type="label">
<object class="GtkLabel" id="label9"> <object class="GtkLabel" id="label9">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Allocation</property> <property name="label" translatable="yes">Allocation</property>
<attributes> <attributes>
<attribute name="weight" value="bold"/> <attribute name="weight" value="bold"/>
@ -531,16 +536,19 @@
<child> <child>
<object class="GtkFrame" id="frame5"> <object class="GtkFrame" id="frame5">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label_xalign">0</property> <property name="label_xalign">0</property>
<property name="shadow_type">none</property> <property name="shadow_type">none</property>
<child> <child>
<object class="GtkAlignment" id="alignment5"> <object class="GtkAlignment" id="alignment5">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="top_padding">5</property> <property name="top_padding">5</property>
<property name="left_padding">12</property> <property name="left_padding">12</property>
<child> <child>
<object class="GtkTable" id="table1"> <object class="GtkTable" id="table1">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="n_rows">4</property> <property name="n_rows">4</property>
<property name="n_columns">2</property> <property name="n_columns">2</property>
<property name="column_spacing">10</property> <property name="column_spacing">10</property>
@ -549,6 +557,8 @@
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="xalign">1</property> <property name="xalign">1</property>
<property name="primary_icon_activatable">False</property>
<property name="secondary_icon_activatable">False</property>
<property name="primary_icon_sensitive">True</property> <property name="primary_icon_sensitive">True</property>
<property name="secondary_icon_sensitive">True</property> <property name="secondary_icon_sensitive">True</property>
<property name="adjustment">adjustment1</property> <property name="adjustment">adjustment1</property>
@ -556,24 +566,26 @@
<packing> <packing>
<property name="left_attach">1</property> <property name="left_attach">1</property>
<property name="right_attach">2</property> <property name="right_attach">2</property>
<property name="x_options"></property> <property name="x_options"/>
<property name="y_options"></property> <property name="y_options"/>
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkLabel" id="label11"> <object class="GtkLabel" id="label11">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property> <property name="xalign">0</property>
<property name="label" translatable="yes">Max Down Speed:</property> <property name="label" translatable="yes">Max Down Speed:</property>
</object> </object>
<packing> <packing>
<property name="x_options">GTK_FILL</property> <property name="x_options">GTK_FILL</property>
<property name="y_options"></property> <property name="y_options"/>
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkLabel" id="label12"> <object class="GtkLabel" id="label12">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property> <property name="xalign">0</property>
<property name="label" translatable="yes">Max Up Speed:</property> <property name="label" translatable="yes">Max Up Speed:</property>
</object> </object>
@ -581,12 +593,13 @@
<property name="top_attach">1</property> <property name="top_attach">1</property>
<property name="bottom_attach">2</property> <property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property> <property name="x_options">GTK_FILL</property>
<property name="y_options"></property> <property name="y_options"/>
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkLabel" id="label13"> <object class="GtkLabel" id="label13">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property> <property name="xalign">0</property>
<property name="label" translatable="yes">Max Connections:</property> <property name="label" translatable="yes">Max Connections:</property>
</object> </object>
@ -594,12 +607,13 @@
<property name="top_attach">2</property> <property name="top_attach">2</property>
<property name="bottom_attach">3</property> <property name="bottom_attach">3</property>
<property name="x_options">GTK_FILL</property> <property name="x_options">GTK_FILL</property>
<property name="y_options"></property> <property name="y_options"/>
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkLabel" id="label14"> <object class="GtkLabel" id="label14">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property> <property name="xalign">0</property>
<property name="label" translatable="yes">Max Upload Slots:</property> <property name="label" translatable="yes">Max Upload Slots:</property>
</object> </object>
@ -607,7 +621,7 @@
<property name="top_attach">3</property> <property name="top_attach">3</property>
<property name="bottom_attach">4</property> <property name="bottom_attach">4</property>
<property name="x_options">GTK_FILL</property> <property name="x_options">GTK_FILL</property>
<property name="y_options"></property> <property name="y_options"/>
</packing> </packing>
</child> </child>
<child> <child>
@ -615,6 +629,8 @@
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="xalign">1</property> <property name="xalign">1</property>
<property name="primary_icon_activatable">False</property>
<property name="secondary_icon_activatable">False</property>
<property name="primary_icon_sensitive">True</property> <property name="primary_icon_sensitive">True</property>
<property name="secondary_icon_sensitive">True</property> <property name="secondary_icon_sensitive">True</property>
<property name="adjustment">adjustment2</property> <property name="adjustment">adjustment2</property>
@ -625,8 +641,8 @@
<property name="right_attach">2</property> <property name="right_attach">2</property>
<property name="top_attach">1</property> <property name="top_attach">1</property>
<property name="bottom_attach">2</property> <property name="bottom_attach">2</property>
<property name="x_options"></property> <property name="x_options"/>
<property name="y_options"></property> <property name="y_options"/>
</packing> </packing>
</child> </child>
<child> <child>
@ -634,6 +650,8 @@
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="xalign">1</property> <property name="xalign">1</property>
<property name="primary_icon_activatable">False</property>
<property name="secondary_icon_activatable">False</property>
<property name="primary_icon_sensitive">True</property> <property name="primary_icon_sensitive">True</property>
<property name="secondary_icon_sensitive">True</property> <property name="secondary_icon_sensitive">True</property>
<property name="adjustment">adjustment3</property> <property name="adjustment">adjustment3</property>
@ -643,8 +661,8 @@
<property name="right_attach">2</property> <property name="right_attach">2</property>
<property name="top_attach">2</property> <property name="top_attach">2</property>
<property name="bottom_attach">3</property> <property name="bottom_attach">3</property>
<property name="x_options"></property> <property name="x_options"/>
<property name="y_options"></property> <property name="y_options"/>
</packing> </packing>
</child> </child>
<child> <child>
@ -652,6 +670,8 @@
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="xalign">1</property> <property name="xalign">1</property>
<property name="primary_icon_activatable">False</property>
<property name="secondary_icon_activatable">False</property>
<property name="primary_icon_sensitive">True</property> <property name="primary_icon_sensitive">True</property>
<property name="secondary_icon_sensitive">True</property> <property name="secondary_icon_sensitive">True</property>
<property name="adjustment">adjustment4</property> <property name="adjustment">adjustment4</property>
@ -661,8 +681,8 @@
<property name="right_attach">2</property> <property name="right_attach">2</property>
<property name="top_attach">3</property> <property name="top_attach">3</property>
<property name="bottom_attach">4</property> <property name="bottom_attach">4</property>
<property name="x_options"></property> <property name="x_options"/>
<property name="y_options"></property> <property name="y_options"/>
</packing> </packing>
</child> </child>
</object> </object>
@ -672,6 +692,7 @@
<child type="label"> <child type="label">
<object class="GtkLabel" id="label10"> <object class="GtkLabel" id="label10">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Bandwidth</property> <property name="label" translatable="yes">Bandwidth</property>
<attributes> <attributes>
<attribute name="weight" value="bold"/> <attribute name="weight" value="bold"/>
@ -688,16 +709,19 @@
<child> <child>
<object class="GtkFrame" id="frame6"> <object class="GtkFrame" id="frame6">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label_xalign">0</property> <property name="label_xalign">0</property>
<property name="shadow_type">none</property> <property name="shadow_type">none</property>
<child> <child>
<object class="GtkAlignment" id="alignment6"> <object class="GtkAlignment" id="alignment6">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="top_padding">5</property> <property name="top_padding">5</property>
<property name="left_padding">12</property> <property name="left_padding">12</property>
<child> <child>
<object class="GtkVBox" id="vbox5"> <object class="GtkVBox" id="vbox5">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<child> <child>
<object class="GtkCheckButton" id="chk_prioritize"> <object class="GtkCheckButton" id="chk_prioritize">
<property name="label" translatable="yes">Prioritize First/Last Pieces</property> <property name="label" translatable="yes">Prioritize First/Last Pieces</property>
@ -755,6 +779,7 @@ used sparingly.</property>
<child type="label"> <child type="label">
<object class="GtkLabel" id="label15"> <object class="GtkLabel" id="label15">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">General</property> <property name="label" translatable="yes">General</property>
<attributes> <attributes>
<attribute name="weight" value="bold"/> <attribute name="weight" value="bold"/>
@ -778,69 +803,26 @@ used sparingly.</property>
<child> <child>
<object class="GtkHBox" id="hbox9"> <object class="GtkHBox" id="hbox9">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">5</property> <property name="spacing">5</property>
<child>
<object class="GtkAlignment" id="alignment1">
<property name="visible">True</property>
<child>
<object class="GtkButton" id="button_revert">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<signal name="clicked" handler="on_button_revert_clicked"/>
<child>
<object class="GtkHBox" id="hbox10">
<property name="visible">True</property>
<child>
<object class="GtkImage" id="image8">
<property name="visible">True</property>
<property name="stock">gtk-revert-to-saved</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label19">
<property name="visible">True</property>
<property name="label" translatable="yes">Revert To Defaults</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="padding">5</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</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> <child>
<object class="GtkAlignment" id="alignment3"> <object class="GtkAlignment" id="alignment3">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<child> <child>
<object class="GtkButton" id="button_apply"> <object class="GtkButton" id="button_apply">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="receives_default">True</property> <property name="receives_default">True</property>
<signal name="clicked" handler="on_button_apply_clicked"/> <signal name="clicked" handler="on_button_apply_clicked" swapped="no"/>
<child> <child>
<object class="GtkHBox" id="hbox7"> <object class="GtkHBox" id="hbox7">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<child> <child>
<object class="GtkImage" id="image7"> <object class="GtkImage" id="image7">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">1</property> <property name="xalign">1</property>
<property name="stock">gtk-apply</property> <property name="stock">gtk-apply</property>
</object> </object>
@ -853,6 +835,7 @@ used sparingly.</property>
<child> <child>
<object class="GtkLabel" id="label18"> <object class="GtkLabel" id="label18">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property> <property name="xalign">0</property>
<property name="label" translatable="yes">Apply To All</property> <property name="label" translatable="yes">Apply To All</property>
</object> </object>
@ -875,6 +858,57 @@ used sparingly.</property>
<property name="position">0</property> <property name="position">0</property>
</packing> </packing>
</child> </child>
<child>
<object class="GtkAlignment" id="alignment1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkButton" id="button_revert">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<signal name="clicked" handler="on_button_revert_clicked" swapped="no"/>
<child>
<object class="GtkHBox" id="hbox10">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkImage" id="image8">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-revert-to-saved</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label19">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Revert To Defaults</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="padding">5</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</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> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
@ -890,22 +924,29 @@ used sparingly.</property>
<child type="tab"> <child type="tab">
<object class="GtkHBox" id="hbox12"> <object class="GtkHBox" id="hbox12">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<child> <child>
<object class="GtkImage" id="image10"> <object class="GtkImage" id="image10">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-properties</property> <property name="stock">gtk-properties</property>
</object> </object>
<packing> <packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property> <property name="position">0</property>
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkLabel" id="label20"> <object class="GtkLabel" id="label20">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">_Options</property> <property name="label" translatable="yes">_Options</property>
<property name="use_underline">True</property> <property name="use_underline">True</property>
</object> </object>
<packing> <packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="padding">5</property> <property name="padding">5</property>
<property name="position">1</property> <property name="position">1</property>
</packing> </packing>
@ -924,12 +965,15 @@ used sparingly.</property>
</child> </child>
</object> </object>
<packing> <packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property> <property name="position">0</property>
</packing> </packing>
</child> </child>
<child internal-child="action_area"> <child internal-child="action_area">
<object class="GtkHButtonBox" id="dialog-action_area1"> <object class="GtkHButtonBox" id="dialog-action_area1">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="layout_style">end</property> <property name="layout_style">end</property>
<child> <child>
<object class="GtkButton" id="button_cancel"> <object class="GtkButton" id="button_cancel">
@ -938,7 +982,7 @@ used sparingly.</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="receives_default">True</property> <property name="receives_default">True</property>
<property name="use_stock">True</property> <property name="use_stock">True</property>
<signal name="clicked" handler="on_button_cancel_clicked"/> <signal name="clicked" handler="on_button_cancel_clicked" swapped="no"/>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
@ -953,7 +997,7 @@ used sparingly.</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="receives_default">True</property> <property name="receives_default">True</property>
<property name="use_stock">True</property> <property name="use_stock">True</property>
<signal name="clicked" handler="on_button_add_clicked"/> <signal name="clicked" handler="on_button_add_clicked" swapped="no"/>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
@ -964,6 +1008,7 @@ used sparingly.</property>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
<property name="fill">True</property>
<property name="pack_type">end</property> <property name="pack_type">end</property>
<property name="position">1</property> <property name="position">1</property>
</packing> </packing>
@ -975,4 +1020,5 @@ used sparingly.</property>
<action-widget response="0">button_add</action-widget> <action-widget response="0">button_add</action-widget>
</action-widgets> </action-widgets>
</object> </object>
<object class="GtkListStore" id="liststore1"/>
</interface> </interface>

View File

@ -804,6 +804,30 @@
<property name="n_columns">4</property> <property name="n_columns">4</property>
<property name="column_spacing">5</property> <property name="column_spacing">5</property>
<property name="row_spacing">2</property> <property name="row_spacing">2</property>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child> <child>
<object class="GtkLabel" id="summary_comments"> <object class="GtkLabel" id="summary_comments">
<property name="visible">True</property> <property name="visible">True</property>
@ -817,7 +841,7 @@
<property name="right_attach">4</property> <property name="right_attach">4</property>
<property name="top_attach">5</property> <property name="top_attach">5</property>
<property name="bottom_attach">6</property> <property name="bottom_attach">6</property>
<property name="y_options"></property> <property name="y_options"/>
</packing> </packing>
</child> </child>
<child> <child>
@ -835,7 +859,7 @@
<property name="top_attach">5</property> <property name="top_attach">5</property>
<property name="bottom_attach">6</property> <property name="bottom_attach">6</property>
<property name="x_options">GTK_FILL</property> <property name="x_options">GTK_FILL</property>
<property name="y_options"></property> <property name="y_options"/>
</packing> </packing>
</child> </child>
<child> <child>
@ -850,7 +874,7 @@
<property name="right_attach">2</property> <property name="right_attach">2</property>
<property name="top_attach">4</property> <property name="top_attach">4</property>
<property name="bottom_attach">5</property> <property name="bottom_attach">5</property>
<property name="y_options"></property> <property name="y_options"/>
</packing> </packing>
</child> </child>
<child> <child>
@ -868,7 +892,7 @@
<property name="top_attach">4</property> <property name="top_attach">4</property>
<property name="bottom_attach">5</property> <property name="bottom_attach">5</property>
<property name="x_options">GTK_FILL</property> <property name="x_options">GTK_FILL</property>
<property name="y_options"></property> <property name="y_options"/>
</packing> </packing>
</child> </child>
<child> <child>
@ -885,7 +909,7 @@
<property name="right_attach">4</property> <property name="right_attach">4</property>
<property name="top_attach">1</property> <property name="top_attach">1</property>
<property name="bottom_attach">2</property> <property name="bottom_attach">2</property>
<property name="y_options"></property> <property name="y_options"/>
</packing> </packing>
</child> </child>
<child> <child>
@ -902,7 +926,7 @@
<property name="top_attach">1</property> <property name="top_attach">1</property>
<property name="bottom_attach">2</property> <property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property> <property name="x_options">GTK_FILL</property>
<property name="y_options"></property> <property name="y_options"/>
</packing> </packing>
</child> </child>
<child> <child>
@ -918,7 +942,7 @@
<property name="right_attach">4</property> <property name="right_attach">4</property>
<property name="top_attach">7</property> <property name="top_attach">7</property>
<property name="bottom_attach">8</property> <property name="bottom_attach">8</property>
<property name="y_options"></property> <property name="y_options"/>
</packing> </packing>
</child> </child>
<child> <child>
@ -936,7 +960,7 @@
<property name="top_attach">7</property> <property name="top_attach">7</property>
<property name="bottom_attach">8</property> <property name="bottom_attach">8</property>
<property name="x_options">GTK_FILL</property> <property name="x_options">GTK_FILL</property>
<property name="y_options"></property> <property name="y_options"/>
</packing> </packing>
</child> </child>
<child> <child>
@ -961,7 +985,7 @@
<property name="top_attach">3</property> <property name="top_attach">3</property>
<property name="bottom_attach">4</property> <property name="bottom_attach">4</property>
<property name="x_options">GTK_FILL</property> <property name="x_options">GTK_FILL</property>
<property name="y_options"></property> <property name="y_options"/>
</packing> </packing>
</child> </child>
<child> <child>
@ -976,7 +1000,7 @@
<packing> <packing>
<property name="left_attach">1</property> <property name="left_attach">1</property>
<property name="right_attach">4</property> <property name="right_attach">4</property>
<property name="y_options"></property> <property name="y_options"/>
</packing> </packing>
</child> </child>
<child> <child>
@ -1000,7 +1024,7 @@
</object> </object>
<packing> <packing>
<property name="x_options">GTK_FILL</property> <property name="x_options">GTK_FILL</property>
<property name="y_options"></property> <property name="y_options"/>
</packing> </packing>
</child> </child>
<child> <child>
@ -1024,7 +1048,7 @@
<property name="top_attach">2</property> <property name="top_attach">2</property>
<property name="bottom_attach">3</property> <property name="bottom_attach">3</property>
<property name="x_options">GTK_FILL</property> <property name="x_options">GTK_FILL</property>
<property name="y_options"></property> <property name="y_options"/>
</packing> </packing>
</child> </child>
<child> <child>
@ -1041,7 +1065,7 @@
<property name="right_attach">4</property> <property name="right_attach">4</property>
<property name="top_attach">2</property> <property name="top_attach">2</property>
<property name="bottom_attach">3</property> <property name="bottom_attach">3</property>
<property name="y_options"></property> <property name="y_options"/>
</packing> </packing>
</child> </child>
<child> <child>
@ -1059,7 +1083,7 @@
<property name="top_attach">6</property> <property name="top_attach">6</property>
<property name="bottom_attach">7</property> <property name="bottom_attach">7</property>
<property name="x_options">GTK_FILL</property> <property name="x_options">GTK_FILL</property>
<property name="y_options"></property> <property name="y_options"/>
</packing> </packing>
</child> </child>
<child> <child>
@ -1074,7 +1098,7 @@
<property name="right_attach">4</property> <property name="right_attach">4</property>
<property name="top_attach">6</property> <property name="top_attach">6</property>
<property name="bottom_attach">7</property> <property name="bottom_attach">7</property>
<property name="y_options"></property> <property name="y_options"/>
</packing> </packing>
</child> </child>
<child> <child>
@ -1089,7 +1113,7 @@
<property name="right_attach">2</property> <property name="right_attach">2</property>
<property name="top_attach">3</property> <property name="top_attach">3</property>
<property name="bottom_attach">4</property> <property name="bottom_attach">4</property>
<property name="y_options"></property> <property name="y_options"/>
</packing> </packing>
</child> </child>
<child> <child>
@ -1107,7 +1131,7 @@
<property name="top_attach">8</property> <property name="top_attach">8</property>
<property name="bottom_attach">9</property> <property name="bottom_attach">9</property>
<property name="x_options">GTK_FILL</property> <property name="x_options">GTK_FILL</property>
<property name="y_options"></property> <property name="y_options"/>
</packing> </packing>
</child> </child>
<child> <child>
@ -1125,7 +1149,7 @@
<property name="top_attach">9</property> <property name="top_attach">9</property>
<property name="bottom_attach">10</property> <property name="bottom_attach">10</property>
<property name="x_options">GTK_FILL</property> <property name="x_options">GTK_FILL</property>
<property name="y_options"></property> <property name="y_options"/>
</packing> </packing>
</child> </child>
<child> <child>
@ -1141,7 +1165,7 @@
<property name="right_attach">2</property> <property name="right_attach">2</property>
<property name="top_attach">8</property> <property name="top_attach">8</property>
<property name="bottom_attach">9</property> <property name="bottom_attach">9</property>
<property name="y_options"></property> <property name="y_options"/>
</packing> </packing>
</child> </child>
<child> <child>
@ -1157,33 +1181,9 @@
<property name="right_attach">2</property> <property name="right_attach">2</property>
<property name="top_attach">9</property> <property name="top_attach">9</property>
<property name="bottom_attach">10</property> <property name="bottom_attach">10</property>
<property name="y_options"></property> <property name="y_options"/>
</packing> </packing>
</child> </child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
</object> </object>
</child> </child>
</object> </object>
@ -1351,9 +1351,10 @@
<property name="resize_mode">queue</property> <property name="resize_mode">queue</property>
<property name="shadow_type">none</property> <property name="shadow_type">none</property>
<child> <child>
<object class="GtkHBox" id="hbox7"> <object class="GtkTable" id="table6">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="n_columns">3</property>
<child> <child>
<object class="GtkFrame" id="frame1"> <object class="GtkFrame" id="frame1">
<property name="visible">True</property> <property name="visible">True</property>
@ -1370,10 +1371,16 @@
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="border_width">5</property> <property name="border_width">5</property>
<property name="n_rows">5</property> <property name="n_rows">4</property>
<property name="n_columns">3</property> <property name="n_columns">3</property>
<property name="column_spacing">5</property> <property name="column_spacing">5</property>
<property name="row_spacing">2</property> <property name="row_spacing">2</property>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child> <child>
<object class="GtkSpinButton" id="spin_max_connections"> <object class="GtkSpinButton" id="spin_max_connections">
<property name="visible">True</property> <property name="visible">True</property>
@ -1394,8 +1401,8 @@
<property name="right_attach">2</property> <property name="right_attach">2</property>
<property name="top_attach">2</property> <property name="top_attach">2</property>
<property name="bottom_attach">3</property> <property name="bottom_attach">3</property>
<property name="x_options"></property> <property name="x_options"/>
<property name="y_options"></property> <property name="y_options"/>
</packing> </packing>
</child> </child>
<child> <child>
@ -1419,8 +1426,8 @@
<property name="right_attach">2</property> <property name="right_attach">2</property>
<property name="top_attach">1</property> <property name="top_attach">1</property>
<property name="bottom_attach">2</property> <property name="bottom_attach">2</property>
<property name="x_options"></property> <property name="x_options"/>
<property name="y_options"></property> <property name="y_options"/>
</packing> </packing>
</child> </child>
<child> <child>
@ -1430,6 +1437,7 @@
<property name="invisible_char">•</property> <property name="invisible_char">•</property>
<property name="width_chars">6</property> <property name="width_chars">6</property>
<property name="xalign">1</property> <property name="xalign">1</property>
<property name="invisible_char_set">True</property>
<property name="primary_icon_activatable">False</property> <property name="primary_icon_activatable">False</property>
<property name="secondary_icon_activatable">False</property> <property name="secondary_icon_activatable">False</property>
<property name="primary_icon_sensitive">True</property> <property name="primary_icon_sensitive">True</property>
@ -1442,8 +1450,8 @@
<packing> <packing>
<property name="left_attach">1</property> <property name="left_attach">1</property>
<property name="right_attach">2</property> <property name="right_attach">2</property>
<property name="x_options"></property> <property name="x_options"/>
<property name="y_options"></property> <property name="y_options"/>
</packing> </packing>
</child> </child>
<child> <child>
@ -1457,7 +1465,7 @@
<property name="top_attach">2</property> <property name="top_attach">2</property>
<property name="bottom_attach">3</property> <property name="bottom_attach">3</property>
<property name="x_options">GTK_FILL</property> <property name="x_options">GTK_FILL</property>
<property name="y_options"></property> <property name="y_options"/>
</packing> </packing>
</child> </child>
<child> <child>
@ -1471,7 +1479,7 @@
<property name="top_attach">1</property> <property name="top_attach">1</property>
<property name="bottom_attach">2</property> <property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property> <property name="x_options">GTK_FILL</property>
<property name="y_options"></property> <property name="y_options"/>
</packing> </packing>
</child> </child>
<child> <child>
@ -1483,7 +1491,7 @@
</object> </object>
<packing> <packing>
<property name="x_options">GTK_FILL</property> <property name="x_options">GTK_FILL</property>
<property name="y_options"></property> <property name="y_options"/>
</packing> </packing>
</child> </child>
<child> <child>
@ -1495,8 +1503,8 @@
<packing> <packing>
<property name="left_attach">2</property> <property name="left_attach">2</property>
<property name="right_attach">3</property> <property name="right_attach">3</property>
<property name="x_options"></property> <property name="x_options"/>
<property name="y_options"></property> <property name="y_options"/>
</packing> </packing>
</child> </child>
<child> <child>
@ -1510,8 +1518,8 @@
<property name="right_attach">3</property> <property name="right_attach">3</property>
<property name="top_attach">1</property> <property name="top_attach">1</property>
<property name="bottom_attach">2</property> <property name="bottom_attach">2</property>
<property name="x_options"></property> <property name="x_options"/>
<property name="y_options"></property> <property name="y_options"/>
</packing> </packing>
</child> </child>
<child> <child>
@ -1525,7 +1533,7 @@
<property name="top_attach">3</property> <property name="top_attach">3</property>
<property name="bottom_attach">4</property> <property name="bottom_attach">4</property>
<property name="x_options">GTK_FILL</property> <property name="x_options">GTK_FILL</property>
<property name="y_options"></property> <property name="y_options"/>
</packing> </packing>
</child> </child>
<child> <child>
@ -1548,25 +1556,10 @@
<property name="right_attach">2</property> <property name="right_attach">2</property>
<property name="top_attach">3</property> <property name="top_attach">3</property>
<property name="bottom_attach">4</property> <property name="bottom_attach">4</property>
<property name="x_options"></property> <property name="x_options"/>
<property name="y_options"></property> <property name="y_options"/>
</packing> </packing>
</child> </child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
</object> </object>
</child> </child>
</object> </object>
@ -1583,9 +1576,8 @@
</child> </child>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="x_options"/>
<property name="fill">False</property> <property name="y_options">GTK_FILL</property>
<property name="position">0</property>
</packing> </packing>
</child> </child>
<child> <child>
@ -1610,7 +1602,6 @@
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="receives_default">False</property> <property name="receives_default">False</property>
<property name="use_action_appearance">False</property>
<property name="draw_indicator">True</property> <property name="draw_indicator">True</property>
<signal name="toggled" handler="on_chk_toggled" swapped="no"/> <signal name="toggled" handler="on_chk_toggled" swapped="no"/>
</object> </object>
@ -1635,7 +1626,6 @@
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="receives_default">False</property> <property name="receives_default">False</property>
<property name="use_action_appearance">False</property>
<property name="draw_indicator">True</property> <property name="draw_indicator">True</property>
<signal name="toggled" handler="on_chk_stop_at_ratio_toggled" swapped="no"/> <signal name="toggled" handler="on_chk_stop_at_ratio_toggled" swapped="no"/>
</object> </object>
@ -1684,7 +1674,6 @@
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="receives_default">False</property> <property name="receives_default">False</property>
<property name="use_action_appearance">False</property>
<property name="draw_indicator">True</property> <property name="draw_indicator">True</property>
<signal name="toggled" handler="on_chk_toggled" swapped="no"/> <signal name="toggled" handler="on_chk_toggled" swapped="no"/>
</object> </object>
@ -1696,67 +1685,6 @@
<property name="position">1</property> <property name="position">1</property>
</packing> </packing>
</child> </child>
<child>
<object class="GtkCheckButton" id="chk_move_completed">
<property name="label" translatable="yes">Move completed:</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="use_action_appearance">False</property>
<property name="draw_indicator">True</property>
<signal name="toggled" handler="on_chk_move_completed_toggled" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkHBox" id="hbox5">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkFileChooserButton" id="filechooser_move_completed">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can_focus">False</property>
<property name="action">select-folder</property>
<property name="local_only">False</property>
<property name="show_hidden">True</property>
<property name="title" translatable="yes">Select A Folder</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="entry_move_completed">
<property name="sensitive">False</property>
<property name="can_focus">True</property>
<property name="invisible_char">•</property>
<property name="invisible_char_set">True</property>
<property name="truncate_multiline">True</property>
<property name="primary_icon_activatable">False</property>
<property name="secondary_icon_activatable">False</property>
<property name="primary_icon_sensitive">True</property>
<property name="secondary_icon_sensitive">True</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">3</property>
</packing>
</child>
</object> </object>
<packing> <packing>
<property name="expand">True</property> <property name="expand">True</property>
@ -1780,15 +1708,18 @@
</child> </child>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="left_attach">1</property>
<property name="fill">False</property> <property name="right_attach">2</property>
<property name="position">1</property> <property name="x_options"/>
<property name="y_options">GTK_FILL</property>
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkVBox" id="vbox4"> <object class="GtkTable" id="table5">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="n_rows">2</property>
<property name="n_columns">2</property>
<child> <child>
<object class="GtkFrame" id="frame2"> <object class="GtkFrame" id="frame2">
<property name="visible">True</property> <property name="visible">True</property>
@ -1804,9 +1735,11 @@
<property name="top_padding">5</property> <property name="top_padding">5</property>
<property name="left_padding">12</property> <property name="left_padding">12</property>
<child> <child>
<object class="GtkVBox" id="vbox1"> <object class="GtkTable" id="table3">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="n_rows">3</property>
<property name="n_columns">2</property>
<child> <child>
<object class="GtkCheckButton" id="chk_private"> <object class="GtkCheckButton" id="chk_private">
<property name="label" translatable="yes">Private</property> <property name="label" translatable="yes">Private</property>
@ -1814,46 +1747,11 @@
<property name="sensitive">False</property> <property name="sensitive">False</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="receives_default">False</property> <property name="receives_default">False</property>
<property name="use_action_appearance">False</property>
<property name="draw_indicator">True</property> <property name="draw_indicator">True</property>
<signal name="toggled" handler="on_chk_toggled" swapped="no"/> <signal name="toggled" handler="on_chk_toggled" swapped="no"/>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="y_options"/>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="chk_prioritize_first_last">
<property name="label" translatable="yes">Prioritize First/Last</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="use_action_appearance">False</property>
<property name="draw_indicator">True</property>
<signal name="toggled" handler="on_chk_toggled" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="chk_sequential_download">
<property name="label" translatable="yes">Sequential Download</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="use_action_appearance">False</property>
<property name="draw_indicator">True</property>
<signal name="toggled" handler="on_chk_toggled" swapped="no"/>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing> </packing>
</child> </child>
<child> <child>
@ -1862,35 +1760,146 @@
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="receives_default">False</property> <property name="receives_default">False</property>
<property name="use_action_appearance">False</property>
<property name="draw_indicator">True</property> <property name="draw_indicator">True</property>
<signal name="toggled" handler="on_chk_toggled" swapped="no"/> <signal name="toggled" handler="on_chk_toggled" swapped="no"/>
</object> </object>
<packing> <packing>
<property name="expand">True</property> <property name="left_attach">1</property>
<property name="fill">True</property> <property name="right_attach">2</property>
<property name="position">3</property> <property name="y_options"/>
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkButton" id="button_edit_trackers"> <object class="GtkCheckButton" id="chk_prioritize_first_last">
<property name="label" translatable="yes">Prioritize First/Last</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="draw_indicator">True</property>
<signal name="toggled" handler="on_chk_toggled" swapped="no"/>
</object>
<packing>
<property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="y_options"/>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="chk_sequential_download">
<property name="label" translatable="yes">Sequential Download</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="draw_indicator">True</property>
<signal name="toggled" handler="on_chk_toggled" swapped="no"/>
</object>
<packing>
<property name="right_attach">2</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="y_options"/>
</packing>
</child>
</object>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel" id="label16">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">&lt;b&gt;General&lt;/b&gt;</property>
<property name="use_markup">True</property>
</object>
</child>
</object>
<packing>
<property name="x_options">GTK_EXPAND | GTK_SHRINK | GTK_FILL</property>
</packing>
</child>
<child>
<object class="GtkFrame" id="frame3">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label_xalign">0</property>
<property name="shadow_type">none</property>
<child>
<object class="GtkAlignment" id="alignment1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="left_padding">12</property>
<property name="right_padding">5</property>
<child>
<object class="GtkTable" id="table4">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="n_rows">2</property>
<child>
<object class="GtkCheckButton" id="chk_move_completed">
<property name="label" translatable="yes">Move completed:</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="draw_indicator">True</property>
<signal name="toggled" handler="on_chk_move_completed_toggled" swapped="no"/>
</object>
<packing>
<property name="y_options"/>
</packing>
</child>
<child>
<object class="GtkHBox" id="hbox_move_completed_path_chooser">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="y_options"/>
</packing>
</child>
</object>
</child>
</object>
</child>
<child type="label_item">
<placeholder/>
</child>
</object>
<packing>
<property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
</child>
<child>
<object class="GtkFrame" id="frame5">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label_xalign">0</property>
<property name="shadow_type">none</property>
<child>
<object class="GtkAlignment" id="alignment5">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="left_padding">12</property>
<child>
<object class="GtkVBox" id="vbox2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkButton" id="button_apply">
<property name="label">gtk-apply</property>
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property> <property name="receives_default">True</property>
<property name="use_action_appearance">False</property> <property name="use_stock">True</property>
<property name="xalign">0</property> <signal name="clicked" handler="on_button_apply_clicked" swapped="no"/>
<property name="yalign">0</property>
<signal name="clicked" handler="on_button_edit_trackers_clicked" swapped="no"/>
<child>
<object class="GtkHBox" id="hbox8">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkImage" id="image6">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-edit</property>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
@ -1899,7 +1908,31 @@
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkLabel" id="label17"> <object class="GtkButton" id="button_edit_trackers1">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="xalign">0</property>
<property name="yalign">0</property>
<child>
<object class="GtkHBox" id="hbox1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkImage" id="image7">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-edit</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label25">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="label" translatable="yes">_Edit Trackers</property> <property name="label" translatable="yes">_Edit Trackers</property>
@ -1917,15 +1950,18 @@
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
<property name="fill">False</property> <property name="fill">False</property>
<property name="position">4</property> <property name="position">1</property>
</packing> </packing>
</child> </child>
<child>
<placeholder/>
</child>
</object> </object>
</child> </child>
</object> </object>
</child> </child>
<child type="label"> <child type="label">
<object class="GtkLabel" id="label16"> <object class="GtkLabel" id="label17">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="label" translatable="yes">General</property> <property name="label" translatable="yes">General</property>
@ -1936,53 +1972,17 @@
</child> </child>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="left_attach">1</property>
<property name="fill">False</property> <property name="right_attach">2</property>
<property name="position">0</property> <property name="x_options"/>
</packing> <property name="y_options">GTK_FILL</property>
</child>
<child>
<object class="GtkFrame" id="frame3">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label_xalign">0</property>
<property name="shadow_type">none</property>
<child>
<object class="GtkAlignment" id="alignment5">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property>
<property name="xscale">0</property>
<property name="left_padding">12</property>
<child>
<object class="GtkButton" id="button_apply">
<property name="label">gtk-apply</property>
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_action_appearance">False</property>
<property name="use_stock">True</property>
<signal name="clicked" handler="on_button_apply_clicked" swapped="no"/>
</object>
</child>
</object>
</child>
<child type="label_item">
<placeholder/>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing> </packing>
</child> </child>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="left_attach">2</property>
<property name="fill">False</property> <property name="right_attach">3</property>
<property name="position">2</property> <property name="y_options"/>
</packing> </packing>
</child> </child>
</object> </object>

View File

@ -116,7 +116,7 @@
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkHBox" id="hbox2"> <object class="GtkHBox" id="hbox_entry">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="spacing">5</property> <property name="spacing">5</property>
@ -133,23 +133,7 @@
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkEntry" id="entry_destination"> <placeholder/>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="has_focus">True</property>
<property name="is_focus">True</property>
<property name="truncate_multiline">True</property>
<property name="activates_default">True</property>
<property name="primary_icon_activatable">False</property>
<property name="secondary_icon_activatable">False</property>
<property name="primary_icon_sensitive">True</property>
<property name="secondary_icon_sensitive">True</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child> </child>
</object> </object>
<packing> <packing>

View File

@ -0,0 +1,947 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<requires lib="gtk+" version="2.18"/>
<!-- interface-naming-policy project-wide -->
<object class="GtkAction" id="action1"/>
<object class="GtkAdjustment" id="adjustment1">
<property name="upper">100</property>
<property name="step_increment">1</property>
<property name="page_increment">10</property>
</object>
<object class="GtkAdjustment" id="adjustment2">
<property name="upper">100</property>
<property name="step_increment">1</property>
<property name="page_increment">10</property>
</object>
<object class="GtkAdjustment" id="adjustment3">
<property name="lower">-1</property>
<property name="upper">100</property>
<property name="step_increment">1</property>
<property name="page_increment">10</property>
</object>
<object class="GtkDialog" id="completion_config_dialog">
<property name="can_focus">False</property>
<property name="border_width">5</property>
<property name="title" translatable="yes">Properties</property>
<property name="modal">True</property>
<property name="destroy_with_parent">True</property>
<property name="type_hint">dialog</property>
<signal name="key-release-event" handler="on_completion_config_dialog_key_release_event" swapped="no"/>
<signal name="delete-event" handler="on_completion_config_dialog_delete_event" swapped="no"/>
<child internal-child="vbox">
<object class="GtkVBox" id="dialog-vbox1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkFrame" id="config_general_frame">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label_xalign">0</property>
<property name="shadow_type">none</property>
<child>
<object class="GtkAlignment" id="alignment1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="left_padding">12</property>
<child>
<object class="GtkTable" id="table1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="n_rows">3</property>
<property name="n_columns">2</property>
<property name="row_spacing">5</property>
<child>
<placeholder/>
</child>
<child>
<object class="GtkCheckButton" id="show_filechooser_checkbutton">
<property name="label" translatable="yes">Show file chooser</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="draw_indicator">True</property>
<signal name="toggled" handler="on_show_filechooser_checkbutton_toggled" swapped="no"/>
</object>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="visible_rows_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Max drop down rows</property>
</object>
</child>
<child>
<object class="GtkSpinButton" id="visible_rows_spinbutton">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="max_length">2</property>
<property name="invisible_char">•</property>
<property name="invisible_char_set">True</property>
<property name="primary_icon_activatable">False</property>
<property name="secondary_icon_activatable">False</property>
<property name="primary_icon_sensitive">True</property>
<property name="secondary_icon_sensitive">True</property>
<property name="adjustment">adjustment3</property>
<property name="climb_rate">1</property>
<property name="numeric">True</property>
<signal name="value-changed" handler="on_visible_rows_spinbutton_value_changed" swapped="no"/>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="x_options">GTK_EXPAND</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="show_path_entry_checkbutton">
<property name="label" translatable="yes">Show path entry</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="draw_indicator">True</property>
<signal name="toggled" handler="on_show_path_entry_checkbutton_toggled" swapped="no"/>
</object>
<packing>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="show_folder_name_on_button_checkbutton">
<property name="label" translatable="yes">Show folder name</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="draw_indicator">True</property>
<signal name="toggled" handler="on_show_folder_name_on_button_checkbutton_toggled" swapped="no"/>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
</child>
</object>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">&lt;b&gt;General&lt;/b&gt;</property>
<property name="use_markup">True</property>
</object>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child internal-child="action_area">
<object class="GtkHButtonBox" id="dialog-action_area1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="layout_style">end</property>
<child>
<placeholder/>
</child>
<child>
<object class="GtkButton" id="config_dialog_button_close">
<property name="label" translatable="yes">Close</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<signal name="clicked" handler="on_config_dialog_button_close_clicked" swapped="no"/>
</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">True</property>
<property name="pack_type">end</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkFrame" id="frame2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label_xalign">0</property>
<child>
<object class="GtkAlignment" id="alignment2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="left_padding">12</property>
<child>
<object class="GtkTable" id="table2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="n_rows">2</property>
<property name="n_columns">2</property>
<property name="column_spacing">5</property>
<property name="row_spacing">5</property>
<child>
<placeholder/>
</child>
<child>
<object class="GtkCheckButton" id="enable_auto_completion_checkbutton">
<property name="label" translatable="yes">Enable auto completion</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="draw_indicator">True</property>
<signal name="toggled" handler="on_enable_auto_completion_checkbutton_toggled" swapped="no"/>
</object>
</child>
<child>
<object class="GtkToggleButton" id="set_completion_accelerator_button">
<property name="label" translatable="yes">Set new key</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="tooltip_text" translatable="yes">Press this key to set new key accelerators to trigger auto-complete</property>
<signal name="pressed" handler="on_set_completion_accelerator_button_pressed" swapped="no"/>
<signal name="clicked" handler="on_set_completion_accelerator_button_clicked" swapped="no"/>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="show_hidden_files_checkbutton">
<property name="label" translatable="yes">Show hidden files</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0.55000001192092896</property>
<property name="draw_indicator">True</property>
<signal name="toggled" handler="on_show_hidden_files_checkbutton_toggled" swapped="no"/>
</object>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
</child>
</object>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel" id="label4">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">&lt;b&gt;Auto completion&lt;/b&gt;</property>
<property name="use_markup">True</property>
</object>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkFrame" id="config_short_cuts_frame">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label_xalign">0</property>
<property name="shadow_type">etched-out</property>
<child>
<object class="GtkAlignment" id="alignment3">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="top_padding">5</property>
<property name="bottom_padding">7</property>
<property name="left_padding">23</property>
<child>
<object class="GtkTable" id="table3">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="n_rows">6</property>
<property name="n_columns">2</property>
<property name="row_spacing">2</property>
<child>
<object class="GtkLabel" id="label3">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Auto-complete accelerator</property>
</object>
</child>
<child>
<object class="GtkLabel" id="label6">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Save selected entry</property>
</object>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label8">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Edit selected entry</property>
</object>
<packing>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label10">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property>
<property name="yalign">0.019999999552965164</property>
<property name="label" translatable="yes">Remove selected entry</property>
</object>
<packing>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label13">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Toggle display hidden files</property>
</object>
<packing>
<property name="top_attach">4</property>
<property name="bottom_attach">5</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label5">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">CTRL-s</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="completion_accelerator_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label7">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">CTRL-e</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label9">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">CTRL-r</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label11">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">CTRL-h</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">4</property>
<property name="bottom_attach">5</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label12">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Set default text in entry</property>
</object>
<packing>
<property name="top_attach">5</property>
<property name="bottom_attach">6</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label14">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">CTRL-d</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">5</property>
<property name="bottom_attach">6</property>
</packing>
</child>
</object>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel" id="label2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">&lt;b&gt;Short cuts&lt;/b&gt;</property>
<property name="use_markup">True</property>
</object>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
</object>
</child>
<action-widgets>
<action-widget response="0">config_dialog_button_close</action-widget>
</action-widgets>
</object>
<object class="GtkListStore" id="completion_tree_store">
<columns>
<!-- column-name text -->
<column type="gchararray"/>
</columns>
</object>
<object class="GtkWindow" id="completion_popup_window">
<property name="can_focus">False</property>
<property name="type">popup</property>
<property name="resizable">False</property>
<property name="destroy_with_parent">True</property>
<property name="type_hint">combo</property>
<property name="skip_taskbar_hint">True</property>
<property name="skip_pager_hint">True</property>
<property name="decorated">False</property>
<property name="deletable">False</property>
<signal name="button-press-event" handler="on_completion_popup_window_button_press_event" swapped="no"/>
<signal name="key-press-event" handler="on_completion_popup_window_key_press_event" swapped="no"/>
<signal name="focus-out-event" handler="on_completion_popup_window_focus_out_event" swapped="no"/>
<child>
<object class="GtkVBox" id="popup_content_box1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="border_width">3</property>
<property name="spacing">1</property>
<child>
<object class="GtkScrolledWindow" id="completion_scrolled_window">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="can_default">True</property>
<property name="has_default">True</property>
<property name="receives_default">True</property>
<property name="hscrollbar_policy">automatic</property>
<property name="vscrollbar_policy">automatic</property>
<property name="shadow_type">in</property>
<child>
<object class="GtkTreeView" id="completion_treeview">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="model">completion_tree_store</property>
<property name="headers_visible">False</property>
<property name="headers_clickable">False</property>
<property name="enable_search">False</property>
<property name="search_column">0</property>
<property name="show_expanders">False</property>
<signal name="button-press-event" handler="on_completion_treeview_mouse_button_press_event" swapped="no"/>
<signal name="key-press-event" handler="on_completion_treeview_key_press_event" swapped="no"/>
<signal name="motion-notify-event" handler="on_completion_treeview_motion_notify_event" swapped="no"/>
<signal name="scroll-event" handler="on_completion_treeview_scroll_event" swapped="no"/>
<child>
<object class="GtkTreeViewColumn" id="completion_treeview_column">
<property name="sizing">autosize</property>
<property name="fixed_width">129</property>
<property name="title" translatable="yes">column</property>
<property name="expand">True</property>
<child>
<object class="GtkCellRendererText" id="completion_cellrenderertext"/>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
</object>
</child>
</object>
<object class="GtkFileChooserDialog" id="filechooserdialog">
<property name="can_focus">False</property>
<property name="border_width">5</property>
<property name="role">GtkFileChooserDialog</property>
<property name="destroy_with_parent">True</property>
<property name="type_hint">dialog</property>
<property name="action">select-folder</property>
<property name="preview_widget_active">False</property>
<child internal-child="vbox">
<object class="GtkVBox" id="dialog-vbox2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">2</property>
<child internal-child="action_area">
<object class="GtkHButtonBox" id="dialog-action_area2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="layout_style">end</property>
<child>
<object class="GtkButton" id="filechooser_button_cancel">
<property name="label" translatable="yes">Cancel</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="filechooser_button_open">
<property name="label" translatable="yes">Open</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</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">True</property>
<property name="pack_type">end</property>
<property name="position">0</property>
</packing>
</child>
<child>
<placeholder/>
</child>
</object>
</child>
<action-widgets>
<action-widget response="2">filechooser_button_cancel</action-widget>
<action-widget response="0">filechooser_button_open</action-widget>
</action-widgets>
</object>
<object class="GtkListStore" id="stored_values_tree_store">
<columns>
<!-- column-name text -->
<column type="gchararray"/>
</columns>
</object>
<object class="GtkWindow" id="stored_values_popup_window">
<property name="can_focus">False</property>
<property name="type">popup</property>
<property name="resizable">False</property>
<property name="destroy_with_parent">True</property>
<property name="type_hint">popup-menu</property>
<property name="skip_taskbar_hint">True</property>
<property name="skip_pager_hint">True</property>
<property name="decorated">False</property>
<property name="deletable">False</property>
<signal name="button-press-event" handler="on_stored_values_popup_window_button_press_event" swapped="no"/>
<signal name="focus-out-event" handler="on_stored_values_popup_window_focus_out_event" swapped="no"/>
<signal name="hide" handler="on_stored_values_popup_window_hide" swapped="no"/>
<child>
<object class="GtkHBox" id="hbox1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="border_width">3</property>
<property name="spacing">2</property>
<child>
<object class="GtkScrolledWindow" id="scrolledwindow">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="can_default">True</property>
<property name="has_default">True</property>
<property name="receives_default">True</property>
<property name="hscrollbar_policy">never</property>
<property name="vscrollbar_policy">automatic</property>
<property name="shadow_type">in</property>
<child>
<object class="GtkTreeView" id="stored_values_treeview">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="model">stored_values_tree_store</property>
<property name="headers_visible">False</property>
<property name="headers_clickable">False</property>
<property name="search_column">0</property>
<property name="show_expanders">False</property>
<signal name="button-press-event" handler="on_stored_values_treeview_mouse_button_press_event" swapped="no"/>
<signal name="key-release-event" handler="on_stored_values_treeview_key_release_event" swapped="no"/>
<signal name="key-press-event" handler="on_stored_values_treeview_key_press_event" swapped="no"/>
<signal name="scroll-event" handler="on_stored_values_treeview_scroll_event" swapped="no"/>
<child>
<object class="GtkTreeViewColumn" id="stored_values_treeview_column">
<property name="sizing">autosize</property>
<property name="fixed_width">127</property>
<property name="title" translatable="yes">column</property>
<property name="expand">True</property>
<child>
<object class="GtkCellRendererText" id="stored_values_cellrenderertext">
<signal name="edited" handler="on_cellrenderertext_edited" swapped="no"/>
</object>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkVBox" id="vbox2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkVButtonBox" id="buttonbox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">1</property>
<property name="layout_style">start</property>
<signal name="key-press-event" handler="on_buttonbox_key_press_event" swapped="no"/>
<child>
<object class="GtkButton" id="button_add">
<property name="label" translatable="yes">Add</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="tooltip_text" translatable="yes">Add the current entry value to the list</property>
<signal name="clicked" handler="on_button_add_clicked" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="button_edit">
<property name="label" translatable="yes">Edit</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="tooltip_text" translatable="yes">Edit the selected entry</property>
<signal name="clicked" handler="on_button_edit_clicked" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="button_remove">
<property name="label" translatable="yes">Remove</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="tooltip_text" translatable="yes">Remove the selected entry</property>
<signal name="clicked" handler="on_button_remove_clicked" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkButton" id="button_up">
<property name="label" translatable="yes">Up</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="tooltip_text" translatable="yes">Move the selected entry up</property>
<signal name="clicked" handler="on_button_up_clicked" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">3</property>
</packing>
</child>
<child>
<object class="GtkButton" id="button_down">
<property name="label" translatable="yes">Down</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="tooltip_text" translatable="yes">Move the selected entry down</property>
<signal name="clicked" handler="on_button_down_clicked" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">4</property>
</packing>
</child>
<child>
<object class="GtkButton" id="button_default">
<property name="label" translatable="yes">Default</property>
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="tooltip_text" translatable="yes">No default path set</property>
<signal name="clicked" handler="on_button_default_clicked" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">5</property>
</packing>
</child>
<child>
<object class="GtkButton" id="button_properties">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="tooltip_text" translatable="yes">Open properties dialog</property>
<signal name="clicked" handler="on_button_properties_clicked" swapped="no"/>
<child>
<object class="GtkImage" id="image1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-properties</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">6</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="padding">2</property>
<property name="position">0</property>
</packing>
</child>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
<object class="GtkWindow" id="window1">
<property name="can_focus">False</property>
<child>
<object class="GtkHBox" id="entry_combobox_hbox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">3</property>
<signal name="realize" handler="on_entry_combobox_hbox_realize" swapped="no"/>
<child>
<object class="GtkFileChooserButton" id="filechooser_button">
<property name="width_request">160</property>
<property name="can_focus">False</property>
<property name="no_show_all">True</property>
<property name="action">select-folder</property>
<property name="local_only">False</property>
<property name="preview_widget_active">False</property>
<property name="title" translatable="yes">Select a Directory</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="button_open_dialog">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="xalign">0.50999999046325684</property>
<signal name="clicked" handler="on_button_open_dialog_clicked" swapped="no"/>
<child>
<object class="GtkHBox" id="hbox2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkImage" id="image2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property>
<property name="xpad">1</property>
<property name="stock">gtk-open</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="folder_name_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property>
<property name="xpad">6</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="entry_text">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char">•</property>
<property name="invisible_char_set">True</property>
<property name="primary_icon_activatable">False</property>
<property name="secondary_icon_activatable">False</property>
<property name="primary_icon_sensitive">True</property>
<property name="secondary_icon_sensitive">True</property>
<signal name="insert-text" handler="on_entry_text_insert_text" swapped="no"/>
<signal name="key-press-event" handler="on_entry_text_key_press_event" swapped="no"/>
<signal name="delete-text" handler="on_entry_text_delete_text" swapped="no"/>
<signal name="focus-out-event" handler="on_entry_text_focus_out_event" swapped="no"/>
<signal name="scroll-event" handler="on_entry_text_scroll_event" swapped="no"/>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkToggleButton" id="button_toggle_dropdown">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="tooltip_text" translatable="yes">Saved paths</property>
<property name="focus_on_click">False</property>
<signal name="button-press-event" handler="on_button_toggle_dropdown_button_press_event" swapped="no"/>
<signal name="toggled" handler="on_button_toggle_dropdown_toggled" swapped="no"/>
<signal name="scroll-event" handler="on_button_toggle_dropdown_scroll_event" swapped="no"/>
<child>
<object class="GtkVBox" id="vbox1">
<property name="height_request">15</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="homogeneous">True</property>
<child>
<object class="GtkArrow" id="arrow1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="arrow_type">up</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkArrow" id="arrow2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="arrow_type">down</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">3</property>
</packing>
</child>
</object>
</child>
</object>
</interface>

View File

@ -1307,38 +1307,12 @@ status tab (&lt;b&gt;EXPERIMENTAL!!!&lt;/b&gt;)</property>
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkHBox" id="hbox8"> <object class="GtkHBox" id="hbox_download_to_path_chooser">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="spacing">5</property> <property name="spacing">5</property>
<child> <child>
<object class="GtkFileChooserButton" id="download_path_button"> <placeholder/>
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can_focus">False</property>
<property name="action">select-folder</property>
<property name="title" translatable="yes">Select A Folder</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="entry_download_path">
<property name="can_focus">True</property>
<property name="truncate_multiline">True</property>
<property name="primary_icon_activatable">False</property>
<property name="secondary_icon_activatable">False</property>
<property name="primary_icon_sensitive">True</property>
<property name="secondary_icon_sensitive">True</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child> </child>
</object> </object>
<packing> <packing>
@ -1351,38 +1325,12 @@ status tab (&lt;b&gt;EXPERIMENTAL!!!&lt;/b&gt;)</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<child> <child>
<object class="GtkHBox" id="hbox10"> <object class="GtkHBox" id="hbox_copy_torrent_files_path_chooser">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="spacing">5</property> <property name="spacing">5</property>
<child> <child>
<object class="GtkFileChooserButton" id="torrent_files_button"> <placeholder/>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="action">select-folder</property>
<property name="title" translatable="yes">Select A Folder</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="entry_torrents_path">
<property name="can_focus">True</property>
<property name="invisible_char">●</property>
<property name="truncate_multiline">True</property>
<property name="primary_icon_activatable">False</property>
<property name="secondary_icon_activatable">False</property>
<property name="primary_icon_sensitive">True</property>
<property name="secondary_icon_sensitive">True</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child> </child>
</object> </object>
</child> </child>
@ -1399,37 +1347,12 @@ status tab (&lt;b&gt;EXPERIMENTAL!!!&lt;/b&gt;)</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<child> <child>
<object class="GtkHBox" id="hbox13"> <object class="GtkHBox" id="hbox_move_completed_to_path_chooser">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="spacing">5</property> <property name="spacing">5</property>
<child> <child>
<object class="GtkFileChooserButton" id="move_completed_path_button"> <placeholder/>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="action">select-folder</property>
<property name="title" translatable="yes">Select A Folder</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="entry_move_completed_path">
<property name="can_focus">True</property>
<property name="truncate_multiline">True</property>
<property name="primary_icon_activatable">False</property>
<property name="secondary_icon_activatable">False</property>
<property name="primary_icon_sensitive">True</property>
<property name="secondary_icon_sensitive">True</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child> </child>
</object> </object>
</child> </child>
@ -1913,7 +1836,7 @@ used sparingly.</property>
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkButton" id="btn_testport"> <object class="GtkButton" id="button_testport">
<property name="label" translatable="yes">Test Active Port</property> <property name="label" translatable="yes">Test Active Port</property>
<property name="use_action_appearance">False</property> <property name="use_action_appearance">False</property>
<property name="visible">True</property> <property name="visible">True</property>

View File

@ -47,6 +47,7 @@ import deluge.common
import common import common
import dialogs import dialogs
from deluge.configmanager import ConfigManager from deluge.configmanager import ConfigManager
from deluge.ui.gtkui.path_chooser import PathChooser
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
@ -322,28 +323,6 @@ class MenuBar(component.Component):
def on_menuitem_move_activate(self, data=None): def on_menuitem_move_activate(self, data=None):
log.debug("on_menuitem_move_activate") log.debug("on_menuitem_move_activate")
if client.is_localhost():
from deluge.configmanager import ConfigManager
config = ConfigManager("gtkui.conf")
chooser = gtk.FileChooserDialog(
_("Choose a directory to move files to"),
component.get("MainWindow").window,
gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER,
buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
gtk.STOCK_OK, gtk.RESPONSE_OK)
)
chooser.set_local_only(True)
if not deluge.common.windows_check():
chooser.set_icon(common.get_deluge_icon())
chooser.set_property("skip-taskbar-hint", True)
chooser.set_current_folder(config["choose_directory_dialog_path"])
if chooser.run() == gtk.RESPONSE_OK:
result = chooser.get_filename()
config["choose_directory_dialog_path"] = result
client.core.move_storage(
component.get("TorrentView").get_selected_torrents(), result)
chooser.destroy()
else:
component.get("SessionProxy").get_torrent_status( component.get("SessionProxy").get_torrent_status(
component.get("TorrentView").get_selected_torrent(), component.get("TorrentView").get_selected_torrent(),
["save_path"]).addCallback(self.show_move_storage_dialog) ["save_path"]).addCallback(self.show_move_storage_dialog)
@ -358,22 +337,26 @@ class MenuBar(component.Component):
# https://bugzilla.gnome.org/show_bug.cgi?id=546802 # https://bugzilla.gnome.org/show_bug.cgi?id=546802
self.move_storage_dialog = builder.get_object("move_storage_dialog") self.move_storage_dialog = builder.get_object("move_storage_dialog")
self.move_storage_dialog.set_transient_for(self.window.window) self.move_storage_dialog.set_transient_for(self.window.window)
self.move_storage_dialog_entry = builder.get_object("entry_destination") self.move_storage_dialog_hbox = builder.get_object("hbox_entry")
self.move_storage_dialog_entry.set_text(status["save_path"]) self.move_storage_path_chooser = PathChooser("move_completed_paths_list")
def on_dialog_response_event(widget, response_id): self.move_storage_dialog_hbox.add(self.move_storage_path_chooser)
self.move_storage_dialog_hbox.show_all()
self.move_storage_path_chooser.set_text(status["save_path"])
def on_dialog_response_event(widget, response_id):
def on_core_result(result): def on_core_result(result):
# Delete references # Delete references
del self.move_storage_dialog del self.move_storage_dialog
del self.move_storage_dialog_entry del self.move_storage_dialog_hbox
if response_id == gtk.RESPONSE_OK: if response_id == gtk.RESPONSE_OK:
log.debug("Moving torrents to %s", log.debug("Moving torrents to %s",
self.move_storage_dialog_entry.get_text()) self.move_storage_path_chooser.get_text())
path = self.move_storage_dialog_entry.get_text() path = self.move_storage_path_chooser.get_text()
client.core.move_storage( client.core.move_storage(
component.get("TorrentView").get_selected_torrents(), path component.get("TorrentView").get_selected_torrents(), path
).addCallback(on_core_result) ).addCallback(on_core_result)
self.move_storage_path_chooser.save_config()
self.move_storage_dialog.hide() self.move_storage_dialog.hide()
self.move_storage_dialog.connect("response", on_dialog_response_event) self.move_storage_dialog.connect("response", on_dialog_response_event)

View File

@ -37,6 +37,7 @@ import gtk.gdk
import deluge.component as component import deluge.component as component
from deluge.ui.client import client from deluge.ui.client import client
from deluge.ui.gtkui.path_chooser import PathChooser
from deluge.ui.gtkui.torrentdetails import Tab from deluge.ui.gtkui.torrentdetails import Tab
class OptionsTab(Tab): class OptionsTab(Tab):
@ -60,11 +61,15 @@ class OptionsTab(Tab):
self.chk_remove_at_ratio = builder.get_object("chk_remove_at_ratio") self.chk_remove_at_ratio = builder.get_object("chk_remove_at_ratio")
self.spin_stop_ratio = builder.get_object("spin_stop_ratio") self.spin_stop_ratio = builder.get_object("spin_stop_ratio")
self.chk_move_completed = builder.get_object("chk_move_completed") self.chk_move_completed = builder.get_object("chk_move_completed")
self.filechooser_move_completed = builder.get_object("filechooser_move_completed")
self.entry_move_completed = builder.get_object("entry_move_completed") self.entry_move_completed = builder.get_object("entry_move_completed")
self.chk_shared = builder.get_object("chk_shared") self.chk_shared = builder.get_object("chk_shared")
self.button_apply = builder.get_object("button_apply") self.button_apply = builder.get_object("button_apply")
self.move_completed_hbox = builder.get_object("hbox_move_completed_path_chooser")
self.move_completed_path_chooser = PathChooser("move_completed_paths_list")
self.move_completed_hbox.add(self.move_completed_path_chooser)
self.move_completed_hbox.show_all()
self.prev_torrent_id = None self.prev_torrent_id = None
self.prev_status = None self.prev_status = None
@ -85,15 +90,7 @@ class OptionsTab(Tab):
self.spin_stop_ratio.connect("key-press-event", self._on_key_press_event) self.spin_stop_ratio.connect("key-press-event", self._on_key_press_event)
def start(self): def start(self):
if client.is_localhost(): pass
self.filechooser_move_completed.show()
self.entry_move_completed.hide()
else:
self.filechooser_move_completed.hide()
self.entry_move_completed.show()
self.entry_move_completed.connect(
"changed", self._on_entry_move_completed_changed
)
def stop(self): def stop(self):
pass pass
@ -169,10 +166,7 @@ class OptionsTab(Tab):
if status["move_on_completed"] != self.prev_status["move_on_completed"]: if status["move_on_completed"] != self.prev_status["move_on_completed"]:
self.chk_move_completed.set_active(status["move_on_completed"]) self.chk_move_completed.set_active(status["move_on_completed"])
if status["move_on_completed_path"] != self.prev_status["move_on_completed_path"]: if status["move_on_completed_path"] != self.prev_status["move_on_completed_path"]:
if client.is_localhost(): self.move_completed_path_chooser.set_text(status["move_on_completed_path"], cursor_end=False, default_text=True)
self.filechooser_move_completed.set_current_folder(status["move_on_completed_path"])
else:
self.entry_move_completed.set_text(status["move_on_completed_path"])
if status["shared"] != self.prev_status["shared"]: if status["shared"] != self.prev_status["shared"]:
self.chk_shared.set_active(status["shared"]) self.chk_shared.set_active(status["shared"])
@ -249,10 +243,7 @@ class OptionsTab(Tab):
self.prev_torrent_id, self.chk_move_completed.get_active() self.prev_torrent_id, self.chk_move_completed.get_active()
) )
if self.chk_move_completed.get_active(): if self.chk_move_completed.get_active():
if client.is_localhost(): path = self.move_completed_path_chooser.get_text()
path = self.filechooser_move_completed.get_filename()
else:
path = self.entry_move_completed.get_text()
client.core.set_torrent_move_completed_path(self.prev_torrent_id, path) client.core.set_torrent_move_completed_path(self.prev_torrent_id, path)
if self.chk_shared.get_active() != self.prev_status["shared"]: if self.chk_shared.get_active() != self.prev_status["shared"]:
client.core.set_torrents_shared( client.core.set_torrents_shared(
@ -274,13 +265,7 @@ class OptionsTab(Tab):
def _on_chk_move_completed_toggled(self, widget): def _on_chk_move_completed_toggled(self, widget):
value = self.chk_move_completed.get_active() value = self.chk_move_completed.get_active()
if client.is_localhost(): self.move_completed_path_chooser.set_sensitive(value)
widget = self.filechooser_move_completed
else:
widget = self.entry_move_completed
widget.set_sensitive(value)
if not self.button_apply.is_sensitive(): if not self.button_apply.is_sensitive():
self.button_apply.set_sensitive(True) self.button_apply.set_sensitive(True)

View File

@ -0,0 +1,191 @@
#
# path_chooser.py
#
# Copyright (C) 2013 Bro <bro.development@gmail.com>
#
# Deluge is free software.
#
# You may redistribute it and/or modify it under the terms of the
# GNU General Public License, as published by the Free Software
# Foundation; either version 3 of the License, or (at your option)
# any later version.
#
# deluge is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with deluge. If not, write to:
# The Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor
# Boston, MA 02110-1301, USA.
#
# In addition, as a special exception, the copyright holders give
# permission to link the code of portions of this program with the OpenSSL
# library.
# You must obey the GNU General Public License in all respects for all of
# the code used other than OpenSSL. If you modify file(s) with this
# exception, you may extend this exception to your version of the file(s),
# but you are not obligated to do so. If you do not wish to do so, delete
# this exception statement from your version. If you delete this exception
# statement from all source files in the program, then also delete it here.
#
import logging
from deluge.ui.client import client
from deluge.ui.gtkui.path_combo_chooser import PathChooserComboBox
import deluge.component as component
log = logging.getLogger(__name__)
def singleton(cls):
instances = {}
def getinstance():
if cls not in instances:
instances[cls] = cls()
return instances[cls]
return getinstance
@singleton
class PathChoosersHandler(component.Component):
def __init__(self, paths_config_key=None):
#self.chooser_name = "PathChooser_%d" % (len(PathChooser.path_choosers) +1)
component.Component.__init__(self, "PathChoosersHandler")
self.path_choosers = []
self.paths_list_keys = []
self.config_properties = {}
self.started = False
self.config_keys_to_funcs_mapping = {"path_chooser_show_chooser_button_on_localhost": "filechooser_button_visible",
"path_chooser_show_path_entry": "path_entry_visible",
"path_chooser_auto_complete_enabled": "auto_complete_enabled",
"path_chooser_show_folder_name": "show_folder_name_on_button",
"path_chooser_accelerator_string": "accelerator_string",
"path_chooser_show_hidden_files": "show_hidden_files",
"path_chooser_max_popup_rows": "max_popup_rows",
}
def start(self):
self.started = True
self.update_config_from_core()
def stop(self):
self.started = False
def update_config_from_core(self):
def _on_config_values(config):
self.config_properties.update(config)
for chooser in self.path_choosers:
chooser.set_config(config)
keys = self.config_keys_to_funcs_mapping.keys()
keys += self.paths_list_keys
client.core.get_config_values(keys).addCallback(_on_config_values)
def register_chooser(self, chooser):
chooser.config_key_funcs = {}
for key in self.config_keys_to_funcs_mapping:
chooser.config_key_funcs[key] = [None, None]
chooser.config_key_funcs[key][0] = getattr(chooser, "get_%s" % self.config_keys_to_funcs_mapping[key])
chooser.config_key_funcs[key][1] = getattr(chooser, "set_%s" % self.config_keys_to_funcs_mapping[key])
self.path_choosers.append(chooser)
if not chooser.paths_config_key in self.paths_list_keys:
self.paths_list_keys.append(chooser.paths_config_key)
if self.started:
self.update_config_from_core()
else:
chooser.set_config(self.config_properties)
def set_value_for_path_choosers(self, value, key):
for chooser in self.path_choosers:
chooser.config_key_funcs[key][1](value)
# Save to core
if not key is "path_chooser_max_popup_rows":
client.core.set_config({key: value})
else:
# Since the max rows value can be changed fast with a spinbutton, we
# delay saving to core until the values hasn't been changed in 1 second.
self.max_rows_value_set = value
def update(value_):
# The value hasn't been changed in one second, so save to core
if self.max_rows_value_set == value_:
client.core.set_config({"path_chooser_max_popup_rows": value})
from twisted.internet import reactor
reactor.callLater(1, update, value)
def on_list_values_changed(self, values, key, caller):
# Save to core
config = { key : values }
client.core.set_config(config)
# Set the values on all path choosers with that key
for chooser in self.path_choosers:
# Found chooser with values from 'key'
if chooser.paths_config_key == key:
chooser.set_values(values)
def get_config_keys(self):
keys = self.config_keys_to_funcs_mapping.keys()
keys += self.paths_list_keys
return keys
class PathChooser(PathChooserComboBox):
def __init__(self, paths_config_key=None):
self.paths_config_key = paths_config_key
PathChooserComboBox.__init__(self)
self.chooser_handler = PathChoosersHandler()
self.chooser_handler.register_chooser(self)
self.set_auto_completer_func(self.on_completion)
self.connect("list-values-changed", self.on_list_values_changed_event)
self.connect("auto-complete-enabled-toggled", self.on_auto_complete_enabled_toggled)
self.connect("show-filechooser-toggled", self.on_show_filechooser_toggled)
self.connect("show-folder-name-on-button", self.on_show_folder_on_button_toggled)
self.connect("show-path-entry-toggled", self.on_show_path_entry_toggled)
self.connect("accelerator-set", self.on_accelerator_set)
self.connect("max-rows-changed", self.on_max_rows_changed)
self.connect("show-hidden-files-toggled", self.on_show_hidden_files_toggled)
def on_auto_complete_enabled_toggled(self, widget, value):
self.chooser_handler.set_value_for_path_choosers(value, "path_chooser_auto_complete_enabled")
def on_show_filechooser_toggled(self, widget, value):
self.chooser_handler.set_value_for_path_choosers(value, "path_chooser_show_chooser_button_on_localhost")
def on_show_folder_on_button_toggled(self, widget, value):
self.chooser_handler.set_value_for_path_choosers(value, "path_chooser_show_folder_name")
def on_show_path_entry_toggled(self, widget, value):
self.chooser_handler.set_value_for_path_choosers(value, "path_chooser_show_path_entry")
def on_accelerator_set(self, widget, value):
self.chooser_handler.set_value_for_path_choosers(value, "path_chooser_accelerator_string")
def on_show_hidden_files_toggled(self, widget, value):
self.chooser_handler.set_value_for_path_choosers(value, "path_chooser_show_hidden_files")
def on_max_rows_changed(self, widget, value):
self.chooser_handler.set_value_for_path_choosers(value, "path_chooser_max_popup_rows")
def on_list_values_changed_event(self, widget, values):
self.chooser_handler.on_list_values_changed(values, self.paths_config_key, self)
def set_config(self, config):
self.config = config
for key in self.config_key_funcs:
if key in config:
try:
self.config_key_funcs[key][1](config[key])
except TypeError, e:
log.warn("TypeError: %s" % str(e))
# Set the saved paths
if self.paths_config_key and self.paths_config_key in config:
self.set_values(config[self.paths_config_key])
def on_completion(self, value, hidden_files):
def on_paths_cb(paths):
self.complete(value, paths)
d = client.core.get_completion_paths(value, hidden_files=hidden_files)
d.addCallback(on_paths_cb)

File diff suppressed because it is too large Load Diff

View File

@ -42,6 +42,7 @@ import logging
import deluge.component as component import deluge.component as component
from deluge.ui.client import client from deluge.ui.client import client
from deluge.ui.gtkui.path_chooser import PathChooser
import deluge.common import deluge.common
import common import common
import dialogs import dialogs
@ -74,6 +75,7 @@ class Preferences(component.Component):
self.treeview = self.builder.get_object("treeview") self.treeview = self.builder.get_object("treeview")
self.notebook = self.builder.get_object("notebook") self.notebook = self.builder.get_object("notebook")
self.gtkui_config = ConfigManager("gtkui.conf") self.gtkui_config = ConfigManager("gtkui.conf")
self.window_open = False
self.load_pref_dialog_state() self.load_pref_dialog_state()
@ -190,6 +192,24 @@ class Preferences(component.Component):
self.all_plugins = [] self.all_plugins = []
self.enabled_plugins = [] self.enabled_plugins = []
self.setup_path_choosers()
def setup_path_choosers(self):
self.download_location_hbox = self.builder.get_object("hbox_download_to_path_chooser")
self.download_location_path_chooser = PathChooser("download_location_paths_list")
self.download_location_hbox.add(self.download_location_path_chooser)
self.download_location_hbox.show_all()
self.move_completed_hbox = self.builder.get_object("hbox_move_completed_to_path_chooser")
self.move_completed_path_chooser = PathChooser("move_completed_paths_list")
self.move_completed_hbox.add(self.move_completed_path_chooser)
self.move_completed_hbox.show_all()
self.copy_torrents_to_hbox = self.builder.get_object("hbox_copy_torrent_files_path_chooser")
self.copy_torrent_files_path_chooser = PathChooser("copy_torrent_files_to_paths_list")
self.copy_torrents_to_hbox.add(self.copy_torrent_files_path_chooser)
self.copy_torrents_to_hbox.show_all()
def __del__(self): def __del__(self):
del self.gtkui_config del self.gtkui_config
@ -252,6 +272,7 @@ class Preferences(component.Component):
def show(self, page=None): def show(self, page=None):
"""Page should be the string in the left list.. ie, 'Network' or """Page should be the string in the left list.. ie, 'Network' or
'Bandwidth'""" 'Bandwidth'"""
self.window_open = True
if page != None: if page != None:
for (index, string) in self.liststore: for (index, string) in self.liststore:
if page == string: if page == string:
@ -260,7 +281,6 @@ class Preferences(component.Component):
component.get("PluginManager").run_on_show_prefs() component.get("PluginManager").run_on_show_prefs()
# Update the preferences dialog to reflect current config settings # Update the preferences dialog to reflect current config settings
self.core_config = {} self.core_config = {}
if client.connected(): if client.connected():
@ -291,162 +311,128 @@ class Preferences(component.Component):
else: else:
self._show() self._show()
def start(self):
if self.window_open:
self.show()
def stop(self):
self.core_config = None
if self.window_open:
self._show()
def _show(self): def _show(self):
if self.core_config != {} and self.core_config != None: self.is_connected = self.core_config != {} and self.core_config != None
core_widgets = { core_widgets = {
"download_path_button": \ "chk_move_completed": ("active", "move_completed"),
("filename", self.core_config["download_location"]), "chk_copy_torrent_file": ("active", "copy_torrent_file"),
"chk_move_completed": \ "chk_del_copy_torrent_file": ("active", "del_copy_torrent_file"),
("active", self.core_config["move_completed"]), "radio_compact_allocation": ("active", "compact_allocation"),
"move_completed_path_button": \ "radio_full_allocation": ("not_active", "compact_allocation"),
("filename", self.core_config["move_completed_path"]), "chk_prioritize_first_last_pieces": ("active", "prioritize_first_last_pieces"),
"chk_copy_torrent_file": \ "chk_sequential_download": ("active", "sequential_download"),
("active", self.core_config["copy_torrent_file"]), "chk_add_paused": ("active", "add_paused"),
"chk_del_copy_torrent_file": \ "active_port_label": ("text", lambda: str(self.active_port)),
("active", self.core_config["del_copy_torrent_file"]), "spin_port_min": ("value", lambda: self.core_config["listen_ports"][0]),
"torrent_files_button": \ "spin_port_max": ("value", lambda: self.core_config["listen_ports"][1]),
("filename", self.core_config["torrentfiles_location"]), "chk_random_port": ("active", "random_port"),
"radio_compact_allocation": \ "spin_outgoing_port_min": ("value", lambda: self.core_config["outgoing_ports"][0]),
("active", self.core_config["compact_allocation"]), "spin_outgoing_port_max": ("value", lambda: self.core_config["outgoing_ports"][1]),
"radio_full_allocation": \ "chk_random_outgoing_ports": ("active", "random_outgoing_ports"),
("not_active", self.core_config["compact_allocation"]), "entry_interface": ("text", "listen_interface"),
"chk_prioritize_first_last_pieces": \ "entry_peer_tos": ("text", "peer_tos"),
("active", "chk_dht": ("active", "dht"),
self.core_config["prioritize_first_last_pieces"]), "chk_upnp": ("active", "upnp"),
"chk_sequential_download": \ "chk_natpmp": ("active", "natpmp"),
("active", "chk_utpex": ("active", "utpex"),
self.core_config["sequential_download"]), "chk_lt_tex": ("active", "lt_tex"),
"chk_add_paused": ("active", self.core_config["add_paused"]), "chk_lsd": ("active", "lsd"),
"spin_port_min": ("value", self.core_config["listen_ports"][0]), "chk_new_releases": ("active", "new_release_check"),
"spin_port_max": ("value", self.core_config["listen_ports"][1]), "chk_send_info": ("active", "send_info"),
"active_port_label": ("text", str(self.active_port)), "entry_geoip": ("text", "geoip_db_location"),
"chk_random_port": ("active", self.core_config["random_port"]), "combo_encin": ("active", "enc_in_policy"),
"spin_outgoing_port_min": ("value", self.core_config["outgoing_ports"][0]), "combo_encout": ("active", "enc_out_policy"),
"spin_outgoing_port_max": ("value", self.core_config["outgoing_ports"][1]), "combo_enclevel": ("active", "enc_level"),
"chk_random_outgoing_ports": ("active", self.core_config["random_outgoing_ports"]), "spin_max_connections_global": ("value", "max_connections_global"),
"entry_interface": ("text", self.core_config["listen_interface"]), "spin_max_download": ("value", "max_download_speed"),
"entry_peer_tos": ("text", self.core_config["peer_tos"]), "spin_max_upload": ("value", "max_upload_speed"),
"chk_dht": ("active", self.core_config["dht"]), "spin_max_upload_slots_global": ("value", "max_upload_slots_global"),
"chk_upnp": ("active", self.core_config["upnp"]), "spin_max_half_open_connections": ("value", "max_connections_per_second"),
"chk_natpmp": ("active", self.core_config["natpmp"]), "spin_max_connections_per_second": ("value", "max_connections_per_second"),
"chk_utpex": ("active", self.core_config["utpex"]), "chk_ignore_limits_on_local_network": ("active", "ignore_limits_on_local_network"),
"chk_lt_tex": ("active", self.core_config["lt_tex"]), "chk_rate_limit_ip_overhead": ("active", "rate_limit_ip_overhead"),
"chk_lsd": ("active", self.core_config["lsd"]), "spin_max_connections_per_torrent": ("value", "max_connections_per_torrent"),
"chk_new_releases": ("active", self.core_config["new_release_check"]), "spin_max_upload_slots_per_torrent": ("value", "max_upload_slots_per_torrent"),
"chk_send_info": ("active", self.core_config["send_info"]), "spin_max_download_per_torrent": ("value", "max_download_speed_per_torrent"),
"entry_geoip": ("text", self.core_config["geoip_db_location"]), "spin_max_upload_per_torrent": ("value", "max_upload_speed_per_torrent"),
"combo_encin": ("active", self.core_config["enc_in_policy"]), "spin_daemon_port": ("value", "daemon_port"),
"combo_encout": ("active", self.core_config["enc_out_policy"]), "chk_allow_remote_connections": ("active", "allow_remote"),
"combo_enclevel": ("active", self.core_config["enc_level"]), "spin_active": ("value", "max_active_limit"),
"spin_max_connections_global": \ "spin_seeding": ("value", "max_active_seeding"),
("value", self.core_config["max_connections_global"]), "spin_downloading": ("value", "max_active_downloading"),
"spin_max_download": \ "chk_dont_count_slow_torrents": ("active", "dont_count_slow_torrents"),
("value", self.core_config["max_download_speed"]), "chk_auto_manage_prefer_seeds": ("active", "auto_manage_prefer_seeds"),
"spin_max_upload": \ "chk_queue_new_top": ("active", "queue_new_to_top"),
("value", self.core_config["max_upload_speed"]), "spin_share_ratio_limit": ("value", "share_ratio_limit"),
"spin_max_upload_slots_global": \ "spin_seed_time_ratio_limit": ("value", "seed_time_ratio_limit"),
("value", self.core_config["max_upload_slots_global"]), "spin_seed_time_limit": ("value", "seed_time_limit"),
"spin_max_half_open_connections": \ "chk_seed_ratio": ("active", "stop_seed_at_ratio"),
("value", self.core_config["max_half_open_connections"]), "spin_share_ratio": ("value", "stop_seed_ratio"),
"spin_max_connections_per_second": \ "chk_remove_ratio": ("active", "remove_seed_at_ratio"),
("value", self.core_config["max_connections_per_second"]), "spin_cache_size": ("value", "cache_size"),
"chk_ignore_limits_on_local_network": \ "spin_cache_expiry": ("value", "cache_expiry"),
("active", self.core_config["ignore_limits_on_local_network"]), "accounts_add": (None, None),
"chk_rate_limit_ip_overhead": \ "accounts_listview": (None, None),
("active", self.core_config["rate_limit_ip_overhead"]), "button_cache_refresh": (None, None),
"spin_max_connections_per_torrent": \ "button_plugin_install": (None, None),
("value", self.core_config["max_connections_per_torrent"]), "button_rescan_plugins": (None, None),
"spin_max_upload_slots_per_torrent": \ "button_find_plugins": (None, None),
("value", self.core_config["max_upload_slots_per_torrent"]), "button_testport": (None, None),
"spin_max_download_per_torrent": \ "plugin_listview": (None, None),
("value", self.core_config["max_download_speed_per_torrent"]),
"spin_max_upload_per_torrent": \
("value", self.core_config["max_upload_speed_per_torrent"]),
"spin_daemon_port": \
("value", self.core_config["daemon_port"]),
"chk_allow_remote_connections": \
("active", self.core_config["allow_remote"]),
"spin_active": ("value", self.core_config["max_active_limit"]),
"spin_seeding": ("value", self.core_config["max_active_seeding"]),
"spin_downloading": ("value", self.core_config["max_active_downloading"]),
"chk_dont_count_slow_torrents": ("active", self.core_config["dont_count_slow_torrents"]),
"chk_auto_manage_prefer_seeds": ("active", self.core_config["auto_manage_prefer_seeds"]),
"chk_queue_new_top": ("active", self.core_config["queue_new_to_top"]),
"spin_share_ratio_limit": ("value", self.core_config["share_ratio_limit"]),
"spin_seed_time_ratio_limit": \
("value", self.core_config["seed_time_ratio_limit"]),
"spin_seed_time_limit": ("value", self.core_config["seed_time_limit"]),
"chk_seed_ratio": ("active", self.core_config["stop_seed_at_ratio"]),
"spin_share_ratio": ("value", self.core_config["stop_seed_ratio"]),
"chk_remove_ratio": ("active", self.core_config["remove_seed_at_ratio"]),
"spin_cache_size": ("value", self.core_config["cache_size"]),
"spin_cache_expiry": ("value", self.core_config["cache_expiry"])
} }
# Add proxy stuff # Add proxy stuff
for t in ("peer", "web_seed", "tracker", "dht"): for t in ("peer", "web_seed", "tracker", "dht"):
core_widgets["spin_proxy_port_%s" % t] = ( core_widgets["spin_proxy_port_%s" % t] = (
"value", self.core_config["proxies"][t]["port"] "value", lambda: self.core_config["proxies"][t]["port"]
) )
core_widgets["combo_proxy_type_%s" % t] = ( core_widgets["combo_proxy_type_%s" % t] = (
"active", self.core_config["proxies"][t]["type"] "active", lambda: self.core_config["proxies"][t]["type"]
) )
core_widgets["txt_proxy_server_%s" % t] = ( core_widgets["txt_proxy_server_%s" % t] = (
"text", self.core_config["proxies"][t]["hostname"] "text", lambda: self.core_config["proxies"][t]["hostname"]
) )
core_widgets["txt_proxy_username_%s" % t] = ( core_widgets["txt_proxy_username_%s" % t] = (
"text", self.core_config["proxies"][t]["username"] "text", lambda: self.core_config["proxies"][t]["username"]
) )
core_widgets["txt_proxy_password_%s" % t] = ( core_widgets["txt_proxy_password_%s" % t] = (
"text", self.core_config["proxies"][t]["password"] "text", lambda: self.core_config["proxies"][t]["password"]
) )
# Change a few widgets if we're connected to a remote host core_widgets[self.download_location_path_chooser] = ("path_chooser", "download_location")
if not client.is_localhost(): core_widgets[self.move_completed_path_chooser] = ("path_chooser", "move_completed_path")
self.builder.get_object("entry_download_path").show() core_widgets[self.copy_torrent_files_path_chooser] = ("path_chooser", "torrentfiles_location")
self.builder.get_object("download_path_button").hide()
core_widgets.pop("download_path_button")
core_widgets["entry_download_path"] = (
"text", self.core_config["download_location"]
)
self.builder.get_object("entry_move_completed_path").show()
self.builder.get_object("move_completed_path_button").hide()
core_widgets.pop("move_completed_path_button")
core_widgets["entry_move_completed_path"] = (
"text", self.core_config["move_completed_path"]
)
self.builder.get_object("entry_torrents_path").show()
self.builder.get_object("torrent_files_button").hide()
core_widgets.pop("torrent_files_button")
core_widgets["entry_torrents_path"] = (
"text", self.core_config["torrentfiles_location"]
)
else:
self.builder.get_object("entry_download_path").hide()
self.builder.get_object("download_path_button").show()
self.builder.get_object("entry_move_completed_path").hide()
self.builder.get_object("move_completed_path_button").show()
self.builder.get_object("entry_torrents_path").hide()
self.builder.get_object("torrent_files_button").show()
# Update the widgets accordingly # Update the widgets accordingly
for key in core_widgets.keys(): for key in core_widgets.keys():
modifier = core_widgets[key][0] modifier = core_widgets[key][0]
value = core_widgets[key][1] if type(key) is str:
widget = self.builder.get_object(key) widget = self.builder.get_object(key)
if type(widget) == gtk.FileChooserButton: else:
for child in widget.get_children(): widget = key
child.set_sensitive(True)
widget.set_sensitive(True)
if modifier == "filename": widget.set_sensitive(self.is_connected)
if value:
try: if self.is_connected:
widget.set_current_folder(value) value = core_widgets[key][1]
except Exception, e: from types import FunctionType
log.debug("Unable to set_current_folder: %s", e) if type(value) is FunctionType:
elif modifier == "active": value = value()
elif type(value) is str:
value = self.core_config[value]
elif modifier:
value = {"active": False, "not_active": False, "value": 0, "text": "", "path_chooser": "" }[modifier]
if modifier == "active":
widget.set_active(value) widget.set_active(value)
elif modifier == "not_active": elif modifier == "not_active":
widget.set_active(not value) widget.set_active(not value)
@ -454,90 +440,17 @@ class Preferences(component.Component):
widget.set_value(float(value)) widget.set_value(float(value))
elif modifier == "text": elif modifier == "text":
widget.set_text(value) widget.set_text(value)
elif modifier == "path_chooser":
widget.set_text(value, cursor_end=False, default_text=True)
if self.is_connected:
for key in core_widgets.keys(): for key in core_widgets.keys():
if type(key) is str:
widget = self.builder.get_object(key) widget = self.builder.get_object(key)
else:
widget = key
# Update the toggle status if necessary # Update the toggle status if necessary
self.on_toggle(widget) self.on_toggle(widget)
else:
core_widget_list = [
"download_path_button",
"chk_move_completed",
"move_completed_path_button",
"chk_copy_torrent_file",
"chk_del_copy_torrent_file",
"torrent_files_button",
"radio_compact_allocation",
"radio_full_allocation",
"chk_prioritize_first_last_pieces",
"chk_sequential_download",
"chk_add_paused",
"spin_port_min",
"spin_port_max",
"active_port_label",
"chk_random_port",
"spin_outgoing_port_min",
"spin_outgoing_port_max",
"chk_random_outgoing_ports",
"entry_interface",
"entry_peer_tos",
"chk_dht",
"chk_upnp",
"chk_natpmp",
"chk_utpex",
"chk_lt_tex",
"chk_lsd",
"chk_send_info",
"chk_new_releases",
"entry_geoip",
"combo_encin",
"combo_encout",
"combo_enclevel",
"spin_max_connections_global",
"spin_max_download",
"spin_max_upload",
"spin_max_upload_slots_global",
"spin_max_half_open_connections",
"spin_max_connections_per_second",
"chk_ignore_limits_on_local_network",
"chk_rate_limit_ip_overhead",
"spin_max_connections_per_torrent",
"spin_max_upload_slots_per_torrent",
"spin_max_download_per_torrent",
"spin_max_upload_per_torrent",
"spin_daemon_port",
"chk_allow_remote_connections",
"spin_seeding",
"spin_downloading",
"spin_active",
"chk_dont_count_slow_torrents",
"chk_auto_manage_prefer_seeds",
"chk_queue_new_top",
"chk_seed_ratio",
"spin_share_ratio",
"chk_remove_ratio",
"spin_share_ratio_limit",
"spin_seed_time_ratio_limit",
"spin_seed_time_limit",
"spin_cache_size",
"spin_cache_expiry",
"button_cache_refresh",
"btn_testport"
]
for t in ("peer", "web_seed", "tracker", "dht"):
core_widget_list.append("spin_proxy_port_%s" % t)
core_widget_list.append("combo_proxy_type_%s" % t)
core_widget_list.append("txt_proxy_username_%s" % t)
core_widget_list.append("txt_proxy_password_%s" % t)
core_widget_list.append("txt_proxy_server_%s" % t)
# We don't appear to be connected to a daemon
for key in core_widget_list:
widget = self.builder.get_object(key)
if type(widget) == gtk.FileChooserButton:
for child in widget.get_children():
child.set_sensitive(False)
widget.set_sensitive(False)
## Downloads tab ## ## Downloads tab ##
self.builder.get_object("chk_show_dialog").set_active( self.builder.get_object("chk_show_dialog").set_active(
@ -576,7 +489,6 @@ class Preferences(component.Component):
self.builder.get_object("chk_show_new_releases").set_active( self.builder.get_object("chk_show_new_releases").set_active(
self.gtkui_config["show_new_releases"]) self.gtkui_config["show_new_releases"])
## Cache tab ## ## Cache tab ##
if client.connected(): if client.connected():
self.__update_cache_status() self.__update_cache_status()
@ -636,20 +548,10 @@ class Preferences(component.Component):
self.builder.get_object("chk_del_copy_torrent_file").get_active() self.builder.get_object("chk_del_copy_torrent_file").get_active()
new_core_config["move_completed"] = \ new_core_config["move_completed"] = \
self.builder.get_object("chk_move_completed").get_active() self.builder.get_object("chk_move_completed").get_active()
if client.is_localhost():
new_core_config["download_location"] = \ new_core_config["download_location"] = self.download_location_path_chooser.get_text()
self.builder.get_object("download_path_button").get_filename() new_core_config["move_completed_path"] = self.move_completed_path_chooser.get_text()
new_core_config["move_completed_path"] = \ new_core_config["torrentfiles_location"] = self.copy_torrent_files_path_chooser.get_text()
self.builder.get_object("move_completed_path_button").get_filename()
new_core_config["torrentfiles_location"] = \
self.builder.get_object("torrent_files_button").get_filename()
else:
new_core_config["download_location"] = \
self.builder.get_object("entry_download_path").get_text()
new_core_config["move_completed_path"] = \
self.builder.get_object("entry_move_completed_path").get_text()
new_core_config["torrentfiles_location"] = \
self.builder.get_object("entry_torrents_path").get_text()
new_core_config["compact_allocation"] = \ new_core_config["compact_allocation"] = \
self.builder.get_object("radio_compact_allocation").get_active() self.builder.get_object("radio_compact_allocation").get_active()
@ -872,6 +774,7 @@ class Preferences(component.Component):
dialog.run() dialog.run()
def hide(self): def hide(self):
self.window_open = False
self.builder.get_object("port_img").hide() self.builder.get_object("port_img").hide()
self.pref_dialog.hide() self.pref_dialog.hide()
@ -918,6 +821,11 @@ class Preferences(component.Component):
except: except:
return return
path_choosers = {"download_location_path_chooser": self.download_location_path_chooser,
"move_completed_path_chooser": self.move_completed_path_chooser,
"torrentfiles_location_path_chooser": self.copy_torrent_files_path_chooser
}
dependents = { dependents = {
"chk_show_dialog": {"chk_focus_dialog": True}, "chk_show_dialog": {"chk_focus_dialog": True},
"chk_random_port": {"spin_port_min": False, "chk_random_port": {"spin_port_min": False,
@ -932,8 +840,8 @@ class Preferences(component.Component):
"password_label": True}, "password_label": True},
"radio_open_folder_custom": {"combo_file_manager": False, "radio_open_folder_custom": {"combo_file_manager": False,
"txt_open_folder_location": True}, "txt_open_folder_location": True},
"chk_move_completed" : {"move_completed_path_button" : True}, "chk_move_completed" : {"move_completed_path_chooser" : True},
"chk_copy_torrent_file" : {"torrent_files_button" : True, "chk_copy_torrent_file" : {"torrentfiles_location_path_chooser" : True,
"chk_del_copy_torrent_file" : True}, "chk_del_copy_torrent_file" : True},
"chk_seed_ratio" : {"spin_share_ratio": True, "chk_seed_ratio" : {"spin_share_ratio": True,
"chk_remove_ratio" : True} "chk_remove_ratio" : True}
@ -942,9 +850,12 @@ class Preferences(component.Component):
def update_dependent_widgets(name, value): def update_dependent_widgets(name, value):
dependency = dependents[name] dependency = dependents[name]
for dep in dependency.keys(): for dep in dependency.keys():
if dep in path_choosers:
depwidget = path_choosers[dep]
else:
depwidget = self.builder.get_object(dep) depwidget = self.builder.get_object(dep)
sensitive = [not value, value][dependency[dep]] sensitive = [not value, value][dependency[dep]]
depwidget.set_sensitive(sensitive) depwidget.set_sensitive(sensitive and self.is_connected)
if dep in dependents: if dep in dependents:
update_dependent_widgets(dep, depwidget.get_active() and sensitive) update_dependent_widgets(dep, depwidget.get_active() and sensitive)
@ -1085,7 +996,7 @@ class Preferences(component.Component):
# If incoming and outgoing both set to disabled, disable level combobox # If incoming and outgoing both set to disabled, disable level combobox
if combo_encin == 2 and combo_encout == 2: if combo_encin == 2 and combo_encout == 2:
combo_enclevel.set_sensitive(False) combo_enclevel.set_sensitive(False)
else: elif self.is_connected:
combo_enclevel.set_sensitive(True) combo_enclevel.set_sensitive(True)
def _on_combo_proxy_type_changed(self, widget): def _on_combo_proxy_type_changed(self, widget):