mirror of
https://git.deluge-torrent.org/deluge
synced 2025-08-09 09:58:39 +00:00
Added language option to Preferences
Changing translation tested and works on: * Windows 7 * OSX 10.8 * Ubuntu 13.04 * Updated the OSX menubar to gtkbuilder * Added language names to the Language dropdown in Preferences
This commit is contained in:
parent
d260f6506f
commit
7c808ab4b4
8 changed files with 593 additions and 259 deletions
193
deluge/common.py
193
deluge/common.py
|
@ -115,6 +115,7 @@ FILE_PRIORITY = {
|
||||||
"Highest Priority": 7
|
"Highest Priority": 7
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
def get_version():
|
def get_version():
|
||||||
"""
|
"""
|
||||||
Returns the program version from the egg metadata
|
Returns the program version from the egg metadata
|
||||||
|
@ -125,9 +126,11 @@ def get_version():
|
||||||
"""
|
"""
|
||||||
return pkg_resources.require("Deluge")[0].version
|
return pkg_resources.require("Deluge")[0].version
|
||||||
|
|
||||||
|
|
||||||
def get_default_config_dir(filename=None):
|
def get_default_config_dir(filename=None):
|
||||||
"""
|
"""
|
||||||
:param filename: if None, only the config path is returned, if provided, a path including the filename will be returned
|
:param filename: if None, only the config path is returned, if provided,
|
||||||
|
a path including the filename will be returned
|
||||||
:type filename: string
|
:type filename: string
|
||||||
:returns: a file path to the config directory and optional filename
|
:returns: a file path to the config directory and optional filename
|
||||||
:rtype: string
|
:rtype: string
|
||||||
|
@ -139,7 +142,8 @@ def get_default_config_dir(filename=None):
|
||||||
appDataPath = os.environ.get("APPDATA")
|
appDataPath = os.environ.get("APPDATA")
|
||||||
if not appDataPath:
|
if not appDataPath:
|
||||||
import _winreg
|
import _winreg
|
||||||
hkey = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders")
|
hkey = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER,
|
||||||
|
"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders")
|
||||||
appDataReg = _winreg.QueryValueEx(hkey, "AppData")
|
appDataReg = _winreg.QueryValueEx(hkey, "AppData")
|
||||||
appDataPath = appDataReg[0]
|
appDataPath = appDataReg[0]
|
||||||
_winreg.CloseKey(hkey)
|
_winreg.CloseKey(hkey)
|
||||||
|
@ -154,6 +158,7 @@ def get_default_config_dir(filename=None):
|
||||||
log.error("Unable to use default config directory, exiting... (%s)", e)
|
log.error("Unable to use default config directory, exiting... (%s)", e)
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
def get_default_download_dir():
|
def get_default_download_dir():
|
||||||
"""
|
"""
|
||||||
:returns: the default download directory
|
:returns: the default download directory
|
||||||
|
@ -168,8 +173,7 @@ def get_default_download_dir():
|
||||||
try:
|
try:
|
||||||
for line in open(userdir_file, 'r'):
|
for line in open(userdir_file, 'r'):
|
||||||
if not line.startswith('#') and 'XDG_DOWNLOAD_DIR' in line:
|
if not line.startswith('#') and 'XDG_DOWNLOAD_DIR' in line:
|
||||||
download_dir = os.path.expandvars(\
|
download_dir = os.path.expandvars(line.partition("=")[2].rstrip().strip('"'))
|
||||||
line.partition("=")[2].rstrip().strip('"'))
|
|
||||||
if os.path.isdir(download_dir):
|
if os.path.isdir(download_dir):
|
||||||
return download_dir
|
return download_dir
|
||||||
except IOError:
|
except IOError:
|
||||||
|
@ -177,6 +181,7 @@ def get_default_download_dir():
|
||||||
|
|
||||||
return os.environ.get("HOME")
|
return os.environ.get("HOME")
|
||||||
|
|
||||||
|
|
||||||
def windows_check():
|
def windows_check():
|
||||||
"""
|
"""
|
||||||
Checks if the current platform is Windows
|
Checks if the current platform is Windows
|
||||||
|
@ -187,6 +192,7 @@ def windows_check():
|
||||||
"""
|
"""
|
||||||
return platform.system() in ('Windows', 'Microsoft')
|
return platform.system() in ('Windows', 'Microsoft')
|
||||||
|
|
||||||
|
|
||||||
def vista_check():
|
def vista_check():
|
||||||
"""
|
"""
|
||||||
Checks if the current platform is Windows Vista
|
Checks if the current platform is Windows Vista
|
||||||
|
@ -197,6 +203,7 @@ def vista_check():
|
||||||
"""
|
"""
|
||||||
return platform.release() == "Vista"
|
return platform.release() == "Vista"
|
||||||
|
|
||||||
|
|
||||||
def osx_check():
|
def osx_check():
|
||||||
"""
|
"""
|
||||||
Checks if the current platform is Mac OS X
|
Checks if the current platform is Mac OS X
|
||||||
|
@ -207,6 +214,7 @@ def osx_check():
|
||||||
"""
|
"""
|
||||||
return platform.system() == "Darwin"
|
return platform.system() == "Darwin"
|
||||||
|
|
||||||
|
|
||||||
def get_pixmap(fname):
|
def get_pixmap(fname):
|
||||||
"""
|
"""
|
||||||
Provides easy access to files in the deluge/ui/data/pixmaps folder within the Deluge egg
|
Provides easy access to files in the deluge/ui/data/pixmaps folder within the Deluge egg
|
||||||
|
@ -219,6 +227,7 @@ def get_pixmap(fname):
|
||||||
"""
|
"""
|
||||||
return resource_filename("deluge", os.path.join("ui", "data", "pixmaps", fname))
|
return resource_filename("deluge", os.path.join("ui", "data", "pixmaps", fname))
|
||||||
|
|
||||||
|
|
||||||
def resource_filename(module, path):
|
def resource_filename(module, path):
|
||||||
# While developing, if there's a second deluge package, installed globally
|
# While developing, if there's a second deluge package, installed globally
|
||||||
# and another in develop mode somewhere else, while pkg_resources.require("Deluge")
|
# and another in develop mode somewhere else, while pkg_resources.require("Deluge")
|
||||||
|
@ -230,6 +239,7 @@ def resource_filename(module, path):
|
||||||
pkg_resources._manager, os.path.join(*(module.split('.')+[path]))
|
pkg_resources._manager, os.path.join(*(module.split('.')+[path]))
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def open_file(path):
|
def open_file(path):
|
||||||
"""
|
"""
|
||||||
Opens a file or folder using the system configured program
|
Opens a file or folder using the system configured program
|
||||||
|
@ -245,6 +255,7 @@ def open_file(path):
|
||||||
else:
|
else:
|
||||||
subprocess.Popen(["xdg-open", "%s" % path])
|
subprocess.Popen(["xdg-open", "%s" % path])
|
||||||
|
|
||||||
|
|
||||||
def open_url_in_browser(url):
|
def open_url_in_browser(url):
|
||||||
"""
|
"""
|
||||||
Opens a url in the desktop's default browser
|
Opens a url in the desktop's default browser
|
||||||
|
@ -263,12 +274,14 @@ kib_txt = "KiB"
|
||||||
mib_txt = "MiB"
|
mib_txt = "MiB"
|
||||||
gib_txt = "GiB"
|
gib_txt = "GiB"
|
||||||
|
|
||||||
|
|
||||||
def translate_strings():
|
def translate_strings():
|
||||||
byte_txt = _("Bytes")
|
byte_txt = _("Bytes")
|
||||||
kib_txt = _("KiB")
|
kib_txt = _("KiB")
|
||||||
mib_txt = _("MiB")
|
mib_txt = _("MiB")
|
||||||
gib_txt = _("GiB")
|
gib_txt = _("GiB")
|
||||||
|
|
||||||
|
|
||||||
def fsize(fsize_b):
|
def fsize(fsize_b):
|
||||||
"""
|
"""
|
||||||
Formats the bytes value into a string with KiB, MiB or GiB units
|
Formats the bytes value into a string with KiB, MiB or GiB units
|
||||||
|
@ -296,6 +309,7 @@ def fsize(fsize_b):
|
||||||
else:
|
else:
|
||||||
return "%d %s" % (fsize_b, byte_txt)
|
return "%d %s" % (fsize_b, byte_txt)
|
||||||
|
|
||||||
|
|
||||||
def fsize_short(fsize_b):
|
def fsize_short(fsize_b):
|
||||||
"""
|
"""
|
||||||
Formats the bytes value into a string with K, M or G units
|
Formats the bytes value into a string with K, M or G units
|
||||||
|
@ -320,6 +334,7 @@ def fsize_short(fsize_b):
|
||||||
fsize_gb = fsize_mb / 1024.0
|
fsize_gb = fsize_mb / 1024.0
|
||||||
return "%.1f %s" % (fsize_gb, _("G"))
|
return "%.1f %s" % (fsize_gb, _("G"))
|
||||||
|
|
||||||
|
|
||||||
def fpcnt(dec):
|
def fpcnt(dec):
|
||||||
"""
|
"""
|
||||||
Formats a string to display a percentage with two decimal places
|
Formats a string to display a percentage with two decimal places
|
||||||
|
@ -337,6 +352,7 @@ def fpcnt(dec):
|
||||||
"""
|
"""
|
||||||
return '%.2f%%' % (dec * 100)
|
return '%.2f%%' % (dec * 100)
|
||||||
|
|
||||||
|
|
||||||
def fspeed(bps):
|
def fspeed(bps):
|
||||||
"""
|
"""
|
||||||
Formats a string to display a transfer speed utilizing :func:`fsize`
|
Formats a string to display a transfer speed utilizing :func:`fsize`
|
||||||
|
@ -361,6 +377,7 @@ def fspeed(bps):
|
||||||
fspeed_gb = fspeed_mb / 1024.0
|
fspeed_gb = fspeed_mb / 1024.0
|
||||||
return "%.1f %s" % (fspeed_gb, _("GiB/s"))
|
return "%.1f %s" % (fspeed_gb, _("GiB/s"))
|
||||||
|
|
||||||
|
|
||||||
def fpeer(num_peers, total_peers):
|
def fpeer(num_peers, total_peers):
|
||||||
"""
|
"""
|
||||||
Formats a string to show 'num_peers' ('total_peers')
|
Formats a string to show 'num_peers' ('total_peers')
|
||||||
|
@ -385,6 +402,7 @@ def fpeer(num_peers, total_peers):
|
||||||
else:
|
else:
|
||||||
return "%d" % num_peers
|
return "%d" % num_peers
|
||||||
|
|
||||||
|
|
||||||
def ftime(seconds):
|
def ftime(seconds):
|
||||||
"""
|
"""
|
||||||
Formats a string to show time in a human readable form
|
Formats a string to show time in a human readable form
|
||||||
|
@ -424,6 +442,7 @@ def ftime(seconds):
|
||||||
weeks = weeks % 52
|
weeks = weeks % 52
|
||||||
return '%dy %dw' % (years, weeks)
|
return '%dy %dw' % (years, weeks)
|
||||||
|
|
||||||
|
|
||||||
def fdate(seconds):
|
def fdate(seconds):
|
||||||
"""
|
"""
|
||||||
Formats a date time string in the locale's date representation based on the systems timezone
|
Formats a date time string in the locale's date representation based on the systems timezone
|
||||||
|
@ -438,6 +457,7 @@ def fdate(seconds):
|
||||||
return ""
|
return ""
|
||||||
return time.strftime("%x %X", time.localtime(seconds))
|
return time.strftime("%x %X", time.localtime(seconds))
|
||||||
|
|
||||||
|
|
||||||
def is_url(url):
|
def is_url(url):
|
||||||
"""
|
"""
|
||||||
A simple test to check if the URL is valid
|
A simple test to check if the URL is valid
|
||||||
|
@ -455,6 +475,7 @@ def is_url(url):
|
||||||
"""
|
"""
|
||||||
return url.partition('://')[0] in ("http", "https", "ftp", "udp")
|
return url.partition('://')[0] in ("http", "https", "ftp", "udp")
|
||||||
|
|
||||||
|
|
||||||
def is_magnet(uri):
|
def is_magnet(uri):
|
||||||
"""
|
"""
|
||||||
A check to determine if a uri is a valid bittorrent magnet uri
|
A check to determine if a uri is a valid bittorrent magnet uri
|
||||||
|
@ -476,6 +497,7 @@ def is_magnet(uri):
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
def create_magnet_uri(infohash, name=None, trackers=[]):
|
def create_magnet_uri(infohash, name=None, trackers=[]):
|
||||||
"""
|
"""
|
||||||
Creates a magnet uri
|
Creates a magnet uri
|
||||||
|
@ -501,6 +523,7 @@ def create_magnet_uri(infohash, name=None, trackers=[]):
|
||||||
|
|
||||||
return uri
|
return uri
|
||||||
|
|
||||||
|
|
||||||
def get_path_size(path):
|
def get_path_size(path):
|
||||||
"""
|
"""
|
||||||
Gets the size in bytes of 'path'
|
Gets the size in bytes of 'path'
|
||||||
|
@ -524,6 +547,7 @@ def get_path_size(path):
|
||||||
dir_size += os.path.getsize(filename)
|
dir_size += os.path.getsize(filename)
|
||||||
return dir_size
|
return dir_size
|
||||||
|
|
||||||
|
|
||||||
def free_space(path):
|
def free_space(path):
|
||||||
"""
|
"""
|
||||||
Gets the free space available at 'path'
|
Gets the free space available at 'path'
|
||||||
|
@ -547,6 +571,7 @@ def free_space(path):
|
||||||
block_size = disk_data.f_frsize
|
block_size = disk_data.f_frsize
|
||||||
return disk_data.f_bavail * block_size
|
return disk_data.f_bavail * block_size
|
||||||
|
|
||||||
|
|
||||||
def is_ip(ip):
|
def is_ip(ip):
|
||||||
"""
|
"""
|
||||||
A simple test to see if 'ip' is valid
|
A simple test to see if 'ip' is valid
|
||||||
|
@ -585,6 +610,7 @@ def is_ip(ip):
|
||||||
except socket.error:
|
except socket.error:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
def path_join(*parts):
|
def path_join(*parts):
|
||||||
"""
|
"""
|
||||||
An implementation of os.path.join that always uses / for the separator
|
An implementation of os.path.join that always uses / for the separator
|
||||||
|
@ -611,6 +637,7 @@ XML_ESCAPES = (
|
||||||
("'", ''')
|
("'", ''')
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def xml_decode(string):
|
def xml_decode(string):
|
||||||
"""
|
"""
|
||||||
Unescape a string that was previously encoded for use within xml.
|
Unescape a string that was previously encoded for use within xml.
|
||||||
|
@ -624,6 +651,7 @@ def xml_decode(string):
|
||||||
string = string.replace(escape, char)
|
string = string.replace(escape, char)
|
||||||
return string
|
return string
|
||||||
|
|
||||||
|
|
||||||
def xml_encode(string):
|
def xml_encode(string):
|
||||||
"""
|
"""
|
||||||
Escape a string for use within an xml element or attribute.
|
Escape a string for use within an xml element or attribute.
|
||||||
|
@ -637,6 +665,7 @@ def xml_encode(string):
|
||||||
string = string.replace(char, escape)
|
string = string.replace(char, escape)
|
||||||
return string
|
return string
|
||||||
|
|
||||||
|
|
||||||
def decode_string(s, encoding="utf8"):
|
def decode_string(s, encoding="utf8"):
|
||||||
"""
|
"""
|
||||||
Decodes a string and return unicode. If it cannot decode using
|
Decodes a string and return unicode. If it cannot decode using
|
||||||
|
@ -672,6 +701,7 @@ def decode_string(s, encoding="utf8"):
|
||||||
pass
|
pass
|
||||||
return u''
|
return u''
|
||||||
|
|
||||||
|
|
||||||
def utf8_encoded(s, encoding="utf8"):
|
def utf8_encoded(s, encoding="utf8"):
|
||||||
"""
|
"""
|
||||||
Returns a utf8 encoded string of s
|
Returns a utf8 encoded string of s
|
||||||
|
@ -690,6 +720,7 @@ def utf8_encoded(s, encoding="utf8"):
|
||||||
s = s.encode("utf8")
|
s = s.encode("utf8")
|
||||||
return s
|
return s
|
||||||
|
|
||||||
|
|
||||||
class VersionSplit(object):
|
class VersionSplit(object):
|
||||||
"""
|
"""
|
||||||
Used for comparing version numbers.
|
Used for comparing version numbers.
|
||||||
|
@ -715,8 +746,8 @@ class VersionSplit(object):
|
||||||
# Check for PEP 386 compliant version
|
# Check for PEP 386 compliant version
|
||||||
match = re.search(VERSION_RE, ver)
|
match = re.search(VERSION_RE, ver)
|
||||||
if match:
|
if match:
|
||||||
group = [(x if x is not None else '') for x in match.group(1,2,3,4,8)]
|
group = [(x if x is not None else '') for x in match.group(1, 2, 3, 4, 8)]
|
||||||
vs = [''.join(group[0:2]),''.join(group[2:4]), group[4].lstrip('.')]
|
vs = [''.join(group[0:2]), ''.join(group[2:4]), group[4].lstrip('.')]
|
||||||
else:
|
else:
|
||||||
ver = ver.lower()
|
ver = ver.lower()
|
||||||
vs = ver.replace("_", "-").split("-")
|
vs = ver.replace("_", "-").split("-")
|
||||||
|
@ -759,8 +790,10 @@ AUTH_LEVEL_NORMAL = 5
|
||||||
AUTH_LEVEL_ADMIN = 10
|
AUTH_LEVEL_ADMIN = 10
|
||||||
AUTH_LEVEL_DEFAULT = AUTH_LEVEL_NORMAL
|
AUTH_LEVEL_DEFAULT = AUTH_LEVEL_NORMAL
|
||||||
|
|
||||||
|
|
||||||
def create_auth_file():
|
def create_auth_file():
|
||||||
import stat, configmanager
|
import stat
|
||||||
|
import configmanager
|
||||||
auth_file = configmanager.get_config_dir("auth")
|
auth_file = configmanager.get_config_dir("auth")
|
||||||
# Check for auth file and create if necessary
|
# Check for auth file and create if necessary
|
||||||
if not os.path.exists(auth_file):
|
if not os.path.exists(auth_file):
|
||||||
|
@ -771,8 +804,10 @@ def create_auth_file():
|
||||||
# Change the permissions on the file so only this user can read/write it
|
# Change the permissions on the file so only this user can read/write it
|
||||||
os.chmod(auth_file, stat.S_IREAD | stat.S_IWRITE)
|
os.chmod(auth_file, stat.S_IREAD | stat.S_IWRITE)
|
||||||
|
|
||||||
|
|
||||||
def create_localclient_account(append=False):
|
def create_localclient_account(append=False):
|
||||||
import configmanager, random
|
import configmanager
|
||||||
|
import random
|
||||||
auth_file = configmanager.get_config_dir("auth")
|
auth_file = configmanager.get_config_dir("auth")
|
||||||
if not os.path.exists(auth_file):
|
if not os.path.exists(auth_file):
|
||||||
create_auth_file()
|
create_auth_file()
|
||||||
|
@ -792,31 +827,137 @@ def create_localclient_account(append=False):
|
||||||
fd.close()
|
fd.close()
|
||||||
|
|
||||||
|
|
||||||
|
def get_translations_path():
|
||||||
|
"""Get the absolute path to the directory containing translation files"""
|
||||||
|
return resource_filename("deluge", "i18n")
|
||||||
|
|
||||||
|
|
||||||
|
def set_env_variable(name, value):
|
||||||
|
'''
|
||||||
|
:param name: environment variable name
|
||||||
|
:param value: environment variable value
|
||||||
|
|
||||||
|
This function ensures that changes to an environment variable are applied
|
||||||
|
to each copy of the environment variables used by a process. Starting from
|
||||||
|
Python 2.4, os.environ changes only apply to the copy Python keeps (os.environ)
|
||||||
|
and are no longer automatically applied to the other copies for the process.
|
||||||
|
|
||||||
|
On Microsoft Windows, each process has multiple copies of the environment
|
||||||
|
variables, one managed by the OS and one managed by the C library. We also
|
||||||
|
need to take care of the fact that the C library used by Python is not
|
||||||
|
necessarily the same as the C library used by pygtk and friends. This because
|
||||||
|
the latest releases of pygtk and friends are built with mingw32 and are thus
|
||||||
|
linked against msvcrt.dll. The official gtk+ binaries have always been built
|
||||||
|
in this way.
|
||||||
|
|
||||||
|
Basen on _putenv in TransUtils.py from sourceforge project gramps
|
||||||
|
http://sourceforge.net/p/gramps/code/HEAD/tree/branches/maintenance/gramps32/src/TransUtils.py
|
||||||
|
'''
|
||||||
|
# Update Python's copy of the environment variables
|
||||||
|
os.environ[name] = value
|
||||||
|
|
||||||
|
if windows_check():
|
||||||
|
from ctypes import windll
|
||||||
|
from ctypes import cdll
|
||||||
|
from ctypes.util import find_msvcrt
|
||||||
|
|
||||||
|
# Update the copy maintained by Windows (so SysInternals Process Explorer sees it)
|
||||||
|
try:
|
||||||
|
result = windll.kernel32.SetEnvironmentVariableW(name, value)
|
||||||
|
if result == 0:
|
||||||
|
raise Warning
|
||||||
|
except Exception:
|
||||||
|
log.warning('Failed to set Env Var \'%s\' (\'kernel32.SetEnvironmentVariableW\')' % name)
|
||||||
|
else:
|
||||||
|
log.debug('Set Env Var \'%s\' to \'%s\' (\'kernel32.SetEnvironmentVariableW\')' % (name, value))
|
||||||
|
|
||||||
|
# Update the copy maintained by msvcrt (used by gtk+ runtime)
|
||||||
|
try:
|
||||||
|
result = cdll.msvcrt._putenv('%s=%s' % (name, value))
|
||||||
|
if result != 0:
|
||||||
|
raise Warning
|
||||||
|
except Exception:
|
||||||
|
log.warning('Failed to set Env Var \'%s\' (\'msvcrt._putenv\')' % name)
|
||||||
|
else:
|
||||||
|
log.debug('Set Env Var \'%s\' to \'%s\' (\'msvcrt._putenv\')' % (name, value))
|
||||||
|
|
||||||
|
# Update the copy maintained by whatever c runtime is used by Python
|
||||||
|
try:
|
||||||
|
msvcrt = find_msvcrt()
|
||||||
|
msvcrtname = str(msvcrt).split('.')[0] if '.' in msvcrt else str(msvcrt)
|
||||||
|
result = cdll.LoadLibrary(msvcrt)._putenv('%s=%s' % (name, value))
|
||||||
|
if result != 0:
|
||||||
|
raise Warning
|
||||||
|
except Exception:
|
||||||
|
log.warning('Failed to set Env Var \'%s\' (\'%s._putenv\')' % (name, msvcrtname))
|
||||||
|
else:
|
||||||
|
log.debug('Set Env Var \'%s\' to \'%s\' (\'%s._putenv\')' % (name, value, msvcrtname))
|
||||||
|
|
||||||
|
|
||||||
|
def set_language(lang):
|
||||||
|
"""
|
||||||
|
Set the language to use.
|
||||||
|
|
||||||
|
gettext and GtkBuilder will load the translations from the specified
|
||||||
|
language.
|
||||||
|
|
||||||
|
:param lang: the language, e.g. "en", "de" or "en_GB"
|
||||||
|
:type lang: str
|
||||||
|
"""
|
||||||
|
lang = str(lang)
|
||||||
|
# Necessary to set there environment variables for GtkBuilder
|
||||||
|
set_env_variable('LANGUAGE', lang) # Windows/Linux
|
||||||
|
set_env_variable('LANG', lang) # For OSX
|
||||||
|
|
||||||
|
translations_path = get_translations_path()
|
||||||
|
ro = gettext.translation("deluge", localedir=translations_path, languages=[lang])
|
||||||
|
ro.install()
|
||||||
|
|
||||||
|
|
||||||
# Initialize gettext
|
# Initialize gettext
|
||||||
def setup_translations(setup_pygtk=False):
|
def setup_translations(setup_gettext=True, setup_pygtk=False):
|
||||||
translations_path = resource_filename("deluge", "i18n")
|
translations_path = get_translations_path()
|
||||||
|
domain = "deluge"
|
||||||
log.info("Setting up translations from %s", translations_path)
|
log.info("Setting up translations from %s", translations_path)
|
||||||
|
|
||||||
try:
|
if setup_pygtk:
|
||||||
if hasattr(locale, "bindtextdomain"):
|
try:
|
||||||
locale.bindtextdomain("deluge", translations_path)
|
|
||||||
if hasattr(locale, "textdomain"):
|
|
||||||
locale.textdomain("deluge")
|
|
||||||
gettext.install("deluge", translations_path, unicode=True)
|
|
||||||
if setup_pygtk:
|
|
||||||
# Even though we're not using glade anymore, let's set it up so that
|
|
||||||
# plugins still using it get properly translated.
|
|
||||||
log.info("Setting up GTK translations from %s", translations_path)
|
log.info("Setting up GTK translations from %s", translations_path)
|
||||||
|
|
||||||
|
if windows_check():
|
||||||
|
import ctypes
|
||||||
|
libintl = ctypes.cdll.intl
|
||||||
|
libintl.bindtextdomain(domain, translations_path.encode(sys.getfilesystemencoding()))
|
||||||
|
libintl.textdomain(domain)
|
||||||
|
libintl.bind_textdomain_codeset(domain, "UTF-8")
|
||||||
|
libintl.gettext.restype = ctypes.c_char_p
|
||||||
|
|
||||||
|
# Use glade for plugins that still uses it
|
||||||
import gtk
|
import gtk
|
||||||
import gtk.glade
|
import gtk.glade
|
||||||
gtk.glade.bindtextdomain("deluge", translations_path)
|
gtk.glade.bindtextdomain(domain, translations_path)
|
||||||
gtk.glade.textdomain("deluge")
|
gtk.glade.textdomain(domain)
|
||||||
|
except Exception, e:
|
||||||
|
log.error("Unable to initialize glade translation!")
|
||||||
|
log.exception(e)
|
||||||
|
if setup_gettext:
|
||||||
|
try:
|
||||||
|
if hasattr(locale, "bindtextdomain"):
|
||||||
|
locale.bindtextdomain(domain, translations_path)
|
||||||
|
if hasattr(locale, "textdomain"):
|
||||||
|
locale.textdomain(domain)
|
||||||
|
|
||||||
|
gettext.bindtextdomain(domain, translations_path)
|
||||||
|
gettext.bind_textdomain_codeset(domain, 'UTF-8')
|
||||||
|
gettext.textdomain(domain)
|
||||||
|
gettext.install(domain, translations_path, unicode=True)
|
||||||
|
except Exception, e:
|
||||||
|
log.error("Unable to initialize gettext/locale!")
|
||||||
|
log.exception(e)
|
||||||
|
import __builtin__
|
||||||
|
__builtin__.__dict__["_"] = lambda x: x
|
||||||
translate_strings()
|
translate_strings()
|
||||||
except Exception, e:
|
|
||||||
log.error("Unable to initialize gettext/locale!")
|
|
||||||
log.exception(e)
|
|
||||||
import __builtin__
|
|
||||||
__builtin__.__dict__["_"] = lambda x: x
|
|
||||||
|
|
||||||
def unicode_argv():
|
def unicode_argv():
|
||||||
""" Gets sys.argv as list of unicode objects on any platform."""
|
""" Gets sys.argv as list of unicode objects on any platform."""
|
||||||
|
|
|
@ -64,8 +64,6 @@ def version_callback(option, opt_str, value, parser):
|
||||||
|
|
||||||
def start_ui():
|
def start_ui():
|
||||||
"""Entry point for ui script"""
|
"""Entry point for ui script"""
|
||||||
deluge.common.setup_translations()
|
|
||||||
|
|
||||||
# Setup the argument parser
|
# Setup the argument parser
|
||||||
parser = OptionParser(usage="%prog [options] [actions]")
|
parser = OptionParser(usage="%prog [options] [actions]")
|
||||||
parser.add_option("-v", "--version", action="callback", callback=version_callback,
|
parser.add_option("-v", "--version", action="callback", callback=version_callback,
|
||||||
|
|
|
@ -320,6 +320,14 @@
|
||||||
</row>
|
</row>
|
||||||
</data>
|
</data>
|
||||||
</object>
|
</object>
|
||||||
|
<object class="GtkListStore" id="liststore8">
|
||||||
|
<columns>
|
||||||
|
<!-- column-name language_code -->
|
||||||
|
<column type="gchararray"/>
|
||||||
|
<!-- column-name language_name -->
|
||||||
|
<column type="gchararray"/>
|
||||||
|
</columns>
|
||||||
|
</object>
|
||||||
<object class="GtkDialog" id="pref_dialog">
|
<object class="GtkDialog" id="pref_dialog">
|
||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
<property name="border_width">5</property>
|
<property name="border_width">5</property>
|
||||||
|
@ -344,7 +352,6 @@
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="button_cancel">
|
<object class="GtkButton" id="button_cancel">
|
||||||
<property name="label">gtk-cancel</property>
|
<property name="label">gtk-cancel</property>
|
||||||
<property name="use_action_appearance">False</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">True</property>
|
<property name="receives_default">True</property>
|
||||||
|
@ -360,7 +367,6 @@
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="button_apply">
|
<object class="GtkButton" id="button_apply">
|
||||||
<property name="label">gtk-apply</property>
|
<property name="label">gtk-apply</property>
|
||||||
<property name="use_action_appearance">False</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">True</property>
|
<property name="receives_default">True</property>
|
||||||
|
@ -376,7 +382,6 @@
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="button_ok">
|
<object class="GtkButton" id="button_ok">
|
||||||
<property name="label">gtk-ok</property>
|
<property name="label">gtk-ok</property>
|
||||||
<property name="use_action_appearance">False</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">True</property>
|
<property name="receives_default">True</property>
|
||||||
|
@ -492,7 +497,6 @@
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkRadioButton" id="radio_classic">
|
<object class="GtkRadioButton" id="radio_classic">
|
||||||
<property name="label" translatable="yes">Standalone</property>
|
<property name="label" translatable="yes">Standalone</property>
|
||||||
<property name="use_action_appearance">False</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="receives_default">False</property>
|
||||||
|
@ -509,7 +513,6 @@
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkRadioButton" id="radio_thinclient">
|
<object class="GtkRadioButton" id="radio_thinclient">
|
||||||
<property name="label" translatable="yes">Thin Client</property>
|
<property name="label" translatable="yes">Thin Client</property>
|
||||||
<property name="use_action_appearance">False</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="receives_default">False</property>
|
||||||
|
@ -566,7 +569,6 @@
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCheckButton" id="chk_show_rate_in_title">
|
<object class="GtkCheckButton" id="chk_show_rate_in_title">
|
||||||
<property name="label" translatable="yes">Show session speed in titlebar</property>
|
<property name="label" translatable="yes">Show session speed in titlebar</property>
|
||||||
<property name="use_action_appearance">False</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="receives_default">False</property>
|
||||||
|
@ -581,7 +583,6 @@
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCheckButton" id="chk_focus_main_window_on_add">
|
<object class="GtkCheckButton" id="chk_focus_main_window_on_add">
|
||||||
<property name="label" translatable="yes">Focus window when adding torrent</property>
|
<property name="label" translatable="yes">Focus window when adding torrent</property>
|
||||||
<property name="use_action_appearance">False</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="receives_default">False</property>
|
||||||
|
@ -594,35 +595,6 @@
|
||||||
<property name="position">1</property>
|
<property name="position">1</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
|
||||||
<object class="GtkCheckButton" id="piecesbar_toggle">
|
|
||||||
<property name="use_action_appearance">False</property>
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">True</property>
|
|
||||||
<property name="receives_default">False</property>
|
|
||||||
<property name="tooltip_text" translatable="yes">Besides being experimental, using the pieces bar
|
|
||||||
will increase the bandwidth used between client
|
|
||||||
and daemon(does not apply in classic mode).
|
|
||||||
Use at your own risk if you wish to help us debug
|
|
||||||
this new feature.</property>
|
|
||||||
<property name="draw_indicator">True</property>
|
|
||||||
<signal name="toggled" handler="on_piecesbar_toggle_toggled" swapped="no"/>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="label62">
|
|
||||||
<property name="visible">True</property>
|
|
||||||
<property name="can_focus">False</property>
|
|
||||||
<property name="label" translatable="yes">Show a pieces bar in the torrent's
|
|
||||||
status tab (<b>EXPERIMENTAL!!!</b>)</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>
|
<child>
|
||||||
<object class="GtkExpander" id="piecebar_colors_expander">
|
<object class="GtkExpander" id="piecebar_colors_expander">
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
|
@ -652,7 +624,6 @@ status tab (<b>EXPERIMENTAL!!!</b>)</property>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkColorButton" id="completed_color">
|
<object class="GtkColorButton" id="completed_color">
|
||||||
<property name="use_action_appearance">False</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">True</property>
|
<property name="receives_default">True</property>
|
||||||
|
@ -663,7 +634,7 @@ status tab (<b>EXPERIMENTAL!!!</b>)</property>
|
||||||
<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"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -681,7 +652,6 @@ status tab (<b>EXPERIMENTAL!!!</b>)</property>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkColorButton" id="downloading_color">
|
<object class="GtkColorButton" id="downloading_color">
|
||||||
<property name="use_action_appearance">False</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">True</property>
|
<property name="receives_default">True</property>
|
||||||
|
@ -694,7 +664,7 @@ status tab (<b>EXPERIMENTAL!!!</b>)</property>
|
||||||
<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"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -712,7 +682,6 @@ status tab (<b>EXPERIMENTAL!!!</b>)</property>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkColorButton" id="waiting_color">
|
<object class="GtkColorButton" id="waiting_color">
|
||||||
<property name="use_action_appearance">False</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">True</property>
|
<property name="receives_default">True</property>
|
||||||
|
@ -725,7 +694,7 @@ status tab (<b>EXPERIMENTAL!!!</b>)</property>
|
||||||
<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"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -743,7 +712,6 @@ status tab (<b>EXPERIMENTAL!!!</b>)</property>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkColorButton" id="missing_color">
|
<object class="GtkColorButton" id="missing_color">
|
||||||
<property name="use_action_appearance">False</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">True</property>
|
<property name="receives_default">True</property>
|
||||||
|
@ -756,13 +724,12 @@ status tab (<b>EXPERIMENTAL!!!</b>)</property>
|
||||||
<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"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="revert_color_completed">
|
<object class="GtkButton" id="revert_color_completed">
|
||||||
<property name="label">gtk-revert-to-saved</property>
|
<property name="label">gtk-revert-to-saved</property>
|
||||||
<property name="use_action_appearance">False</property>
|
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="sensitive">False</property>
|
<property name="sensitive">False</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
|
@ -775,13 +742,12 @@ status tab (<b>EXPERIMENTAL!!!</b>)</property>
|
||||||
<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"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="revert_color_downloading">
|
<object class="GtkButton" id="revert_color_downloading">
|
||||||
<property name="label">gtk-revert-to-saved</property>
|
<property name="label">gtk-revert-to-saved</property>
|
||||||
<property name="use_action_appearance">False</property>
|
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="sensitive">False</property>
|
<property name="sensitive">False</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
|
@ -796,13 +762,12 @@ status tab (<b>EXPERIMENTAL!!!</b>)</property>
|
||||||
<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"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="revert_color_waiting">
|
<object class="GtkButton" id="revert_color_waiting">
|
||||||
<property name="label">gtk-revert-to-saved</property>
|
<property name="label">gtk-revert-to-saved</property>
|
||||||
<property name="use_action_appearance">False</property>
|
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="sensitive">False</property>
|
<property name="sensitive">False</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
|
@ -817,13 +782,12 @@ status tab (<b>EXPERIMENTAL!!!</b>)</property>
|
||||||
<property name="right_attach">3</property>
|
<property name="right_attach">3</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"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="revert_color_missing">
|
<object class="GtkButton" id="revert_color_missing">
|
||||||
<property name="label">gtk-revert-to-saved</property>
|
<property name="label">gtk-revert-to-saved</property>
|
||||||
<property name="use_action_appearance">False</property>
|
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="sensitive">False</property>
|
<property name="sensitive">False</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
|
@ -838,7 +802,7 @@ status tab (<b>EXPERIMENTAL!!!</b>)</property>
|
||||||
<property name="right_attach">3</property>
|
<property name="right_attach">3</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"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
|
@ -859,6 +823,34 @@ status tab (<b>EXPERIMENTAL!!!</b>)</property>
|
||||||
<property name="position">2</property>
|
<property name="position">2</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkCheckButton" id="piecesbar_toggle">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="receives_default">False</property>
|
||||||
|
<property name="tooltip_text" translatable="yes">Besides being experimental, using the pieces bar
|
||||||
|
will increase the bandwidth used between client
|
||||||
|
and daemon(does not apply in classic mode).
|
||||||
|
Use at your own risk if you wish to help us debug
|
||||||
|
this new feature.</property>
|
||||||
|
<property name="draw_indicator">True</property>
|
||||||
|
<signal name="toggled" handler="on_piecesbar_toggle_toggled" swapped="no"/>
|
||||||
|
<child>
|
||||||
|
<object class="GtkLabel" id="label62">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="label" translatable="yes">Show a pieces bar in the torrent's
|
||||||
|
status tab (<b>EXPERIMENTAL!!!</b>)</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>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
|
@ -901,7 +893,6 @@ status tab (<b>EXPERIMENTAL!!!</b>)</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCheckButton" id="chk_show_dialog">
|
<object class="GtkCheckButton" id="chk_show_dialog">
|
||||||
<property name="label" translatable="yes">Always show</property>
|
<property name="label" translatable="yes">Always show</property>
|
||||||
<property name="use_action_appearance">False</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="receives_default">False</property>
|
||||||
|
@ -921,7 +912,6 @@ status tab (<b>EXPERIMENTAL!!!</b>)</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCheckButton" id="chk_focus_dialog">
|
<object class="GtkCheckButton" id="chk_focus_dialog">
|
||||||
<property name="label" translatable="yes">Bring the dialog to focus</property>
|
<property name="label" translatable="yes">Bring the dialog to focus</property>
|
||||||
<property name="use_action_appearance">False</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="receives_default">False</property>
|
||||||
|
@ -977,7 +967,6 @@ status tab (<b>EXPERIMENTAL!!!</b>)</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCheckButton" id="chk_use_tray">
|
<object class="GtkCheckButton" id="chk_use_tray">
|
||||||
<property name="label" translatable="yes">Enable system tray icon</property>
|
<property name="label" translatable="yes">Enable system tray icon</property>
|
||||||
<property name="use_action_appearance">False</property>
|
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
|
@ -999,7 +988,6 @@ status tab (<b>EXPERIMENTAL!!!</b>)</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCheckButton" id="chk_min_on_close">
|
<object class="GtkCheckButton" id="chk_min_on_close">
|
||||||
<property name="label" translatable="yes">Minimize to tray on close</property>
|
<property name="label" translatable="yes">Minimize to tray on close</property>
|
||||||
<property name="use_action_appearance">False</property>
|
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="sensitive">False</property>
|
<property name="sensitive">False</property>
|
||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
|
@ -1023,7 +1011,6 @@ status tab (<b>EXPERIMENTAL!!!</b>)</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCheckButton" id="chk_start_in_tray">
|
<object class="GtkCheckButton" id="chk_start_in_tray">
|
||||||
<property name="label" translatable="yes">Start in tray</property>
|
<property name="label" translatable="yes">Start in tray</property>
|
||||||
<property name="use_action_appearance">False</property>
|
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="sensitive">False</property>
|
<property name="sensitive">False</property>
|
||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
|
@ -1047,7 +1034,6 @@ status tab (<b>EXPERIMENTAL!!!</b>)</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCheckButton" id="chk_enable_appindicator">
|
<object class="GtkCheckButton" id="chk_enable_appindicator">
|
||||||
<property name="label" translatable="yes">Enable Application Indicator</property>
|
<property name="label" translatable="yes">Enable Application Indicator</property>
|
||||||
<property name="use_action_appearance">False</property>
|
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="sensitive">False</property>
|
<property name="sensitive">False</property>
|
||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
|
@ -1072,7 +1058,6 @@ status tab (<b>EXPERIMENTAL!!!</b>)</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCheckButton" id="chk_lock_tray">
|
<object class="GtkCheckButton" id="chk_lock_tray">
|
||||||
<property name="label" translatable="yes">Password protect system tray</property>
|
<property name="label" translatable="yes">Password protect system tray</property>
|
||||||
<property name="use_action_appearance">False</property>
|
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="sensitive">False</property>
|
<property name="sensitive">False</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
|
@ -1164,6 +1149,74 @@ status tab (<b>EXPERIMENTAL!!!</b>)</property>
|
||||||
<property name="position">5</property>
|
<property name="position">5</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkFrame" id="frame2">
|
||||||
|
<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="alignment2">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="left_padding">12</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkHBox" id="hbox8">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkCheckButton" id="checkbutton_language">
|
||||||
|
<property name="label" translatable="yes">System Default</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_checkbutton_language_toggled" swapped="no"/>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">0</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkComboBox" id="combobox_language">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="model">liststore8</property>
|
||||||
|
<property name="active">0</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkCellRendererText" id="cellrenderertext8"/>
|
||||||
|
<attributes>
|
||||||
|
<attribute name="text">1</attribute>
|
||||||
|
</attributes>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">1</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child type="label">
|
||||||
|
<object class="GtkLabel" id="label5">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="label" translatable="yes"><b>Languge</b></property>
|
||||||
|
<property name="use_markup">True</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">6</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
|
@ -1249,7 +1302,6 @@ status tab (<b>EXPERIMENTAL!!!</b>)</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCheckButton" id="chk_move_completed">
|
<object class="GtkCheckButton" id="chk_move_completed">
|
||||||
<property name="label" translatable="yes">Move completed to:</property>
|
<property name="label" translatable="yes">Move completed to:</property>
|
||||||
<property name="use_action_appearance">False</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="receives_default">False</property>
|
||||||
|
@ -1265,7 +1317,6 @@ status tab (<b>EXPERIMENTAL!!!</b>)</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCheckButton" id="chk_copy_torrent_file">
|
<object class="GtkCheckButton" id="chk_copy_torrent_file">
|
||||||
<property name="label" translatable="yes">Copy of .torrent files to:</property>
|
<property name="label" translatable="yes">Copy of .torrent files to:</property>
|
||||||
<property name="use_action_appearance">False</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="receives_default">False</property>
|
||||||
|
@ -1281,7 +1332,6 @@ status tab (<b>EXPERIMENTAL!!!</b>)</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCheckButton" id="chk_del_copy_torrent_file">
|
<object class="GtkCheckButton" id="chk_del_copy_torrent_file">
|
||||||
<property name="label" translatable="yes">Delete copy of torrent file on remove</property>
|
<property name="label" translatable="yes">Delete copy of torrent file on remove</property>
|
||||||
<property name="use_action_appearance">False</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="receives_default">False</property>
|
||||||
|
@ -1407,7 +1457,6 @@ status tab (<b>EXPERIMENTAL!!!</b>)</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkRadioButton" id="radio_full_allocation">
|
<object class="GtkRadioButton" id="radio_full_allocation">
|
||||||
<property name="label" translatable="yes">Use Full Allocation</property>
|
<property name="label" translatable="yes">Use Full Allocation</property>
|
||||||
<property name="use_action_appearance">False</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="receives_default">False</property>
|
||||||
|
@ -1425,7 +1474,6 @@ status tab (<b>EXPERIMENTAL!!!</b>)</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkRadioButton" id="radio_compact_allocation">
|
<object class="GtkRadioButton" id="radio_compact_allocation">
|
||||||
<property name="label" translatable="yes">Use Compact Allocation</property>
|
<property name="label" translatable="yes">Use Compact Allocation</property>
|
||||||
<property name="use_action_appearance">False</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="receives_default">False</property>
|
||||||
|
@ -1482,7 +1530,6 @@ status tab (<b>EXPERIMENTAL!!!</b>)</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCheckButton" id="chk_prioritize_first_last_pieces">
|
<object class="GtkCheckButton" id="chk_prioritize_first_last_pieces">
|
||||||
<property name="label" translatable="yes">Prioritize first and last pieces of torrent</property>
|
<property name="label" translatable="yes">Prioritize first and last pieces of torrent</property>
|
||||||
<property name="use_action_appearance">False</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="receives_default">False</property>
|
||||||
|
@ -1498,7 +1545,6 @@ status tab (<b>EXPERIMENTAL!!!</b>)</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCheckButton" id="chk_sequential_download">
|
<object class="GtkCheckButton" id="chk_sequential_download">
|
||||||
<property name="label" translatable="yes">Sequential download</property>
|
<property name="label" translatable="yes">Sequential download</property>
|
||||||
<property name="use_action_appearance">False</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="receives_default">False</property>
|
||||||
|
@ -1519,7 +1565,6 @@ used sparingly.</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCheckButton" id="chk_add_paused">
|
<object class="GtkCheckButton" id="chk_add_paused">
|
||||||
<property name="label" translatable="yes">Add torrents in Paused state</property>
|
<property name="label" translatable="yes">Add torrents in Paused state</property>
|
||||||
<property name="use_action_appearance">False</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="receives_default">False</property>
|
||||||
|
@ -1763,7 +1808,6 @@ used sparingly.</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCheckButton" id="chk_random_port">
|
<object class="GtkCheckButton" id="chk_random_port">
|
||||||
<property name="label" translatable="yes">Random</property>
|
<property name="label" translatable="yes">Random</property>
|
||||||
<property name="use_action_appearance">False</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="receives_default">False</property>
|
||||||
|
@ -1838,7 +1882,6 @@ used sparingly.</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="button_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="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>
|
||||||
|
@ -1990,7 +2033,6 @@ used sparingly.</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCheckButton" id="chk_random_outgoing_ports">
|
<object class="GtkCheckButton" id="chk_random_outgoing_ports">
|
||||||
<property name="label" translatable="yes">Random</property>
|
<property name="label" translatable="yes">Random</property>
|
||||||
<property name="use_action_appearance">False</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="receives_default">False</property>
|
||||||
|
@ -2213,7 +2255,6 @@ used sparingly.</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCheckButton" id="chk_upnp">
|
<object class="GtkCheckButton" id="chk_upnp">
|
||||||
<property name="label" translatable="yes">UPnP</property>
|
<property name="label" translatable="yes">UPnP</property>
|
||||||
<property name="use_action_appearance">False</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="receives_default">False</property>
|
||||||
|
@ -2229,7 +2270,6 @@ used sparingly.</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCheckButton" id="chk_natpmp">
|
<object class="GtkCheckButton" id="chk_natpmp">
|
||||||
<property name="label" translatable="yes">NAT-PMP</property>
|
<property name="label" translatable="yes">NAT-PMP</property>
|
||||||
<property name="use_action_appearance">False</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="receives_default">False</property>
|
||||||
|
@ -2247,7 +2287,6 @@ used sparingly.</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCheckButton" id="chk_utpex">
|
<object class="GtkCheckButton" id="chk_utpex">
|
||||||
<property name="label" translatable="yes">Peer Exchange</property>
|
<property name="label" translatable="yes">Peer Exchange</property>
|
||||||
<property name="use_action_appearance">False</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="receives_default">False</property>
|
||||||
|
@ -2264,7 +2303,6 @@ used sparingly.</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCheckButton" id="chk_lt_tex">
|
<object class="GtkCheckButton" id="chk_lt_tex">
|
||||||
<property name="label" translatable="yes">Tracker Exchange</property>
|
<property name="label" translatable="yes">Tracker Exchange</property>
|
||||||
<property name="use_action_appearance">False</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="receives_default">False</property>
|
||||||
|
@ -2283,7 +2321,6 @@ used sparingly.</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCheckButton" id="chk_lsd">
|
<object class="GtkCheckButton" id="chk_lsd">
|
||||||
<property name="label" translatable="yes">LSD</property>
|
<property name="label" translatable="yes">LSD</property>
|
||||||
<property name="use_action_appearance">False</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="receives_default">False</property>
|
||||||
|
@ -2299,7 +2336,6 @@ used sparingly.</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCheckButton" id="chk_dht">
|
<object class="GtkCheckButton" id="chk_dht">
|
||||||
<property name="label" translatable="yes">DHT</property>
|
<property name="label" translatable="yes">DHT</property>
|
||||||
<property name="use_action_appearance">False</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="receives_default">False</property>
|
||||||
|
@ -2709,7 +2745,6 @@ Requires a Hex value.</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCheckButton" id="chk_ignore_limits_on_local_network">
|
<object class="GtkCheckButton" id="chk_ignore_limits_on_local_network">
|
||||||
<property name="label" translatable="yes">Ignore limits on local network</property>
|
<property name="label" translatable="yes">Ignore limits on local network</property>
|
||||||
<property name="use_action_appearance">False</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="receives_default">False</property>
|
||||||
|
@ -2732,7 +2767,6 @@ Requires a Hex value.</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCheckButton" id="chk_rate_limit_ip_overhead">
|
<object class="GtkCheckButton" id="chk_rate_limit_ip_overhead">
|
||||||
<property name="label" translatable="yes">Rate limit IP overhead</property>
|
<property name="label" translatable="yes">Rate limit IP overhead</property>
|
||||||
<property name="use_action_appearance">False</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="receives_default">False</property>
|
||||||
|
@ -3045,7 +3079,6 @@ Requires a Hex value.</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCheckButton" id="chk_show_new_releases">
|
<object class="GtkCheckButton" id="chk_show_new_releases">
|
||||||
<property name="label" translatable="yes">Be alerted about new releases</property>
|
<property name="label" translatable="yes">Be alerted about new releases</property>
|
||||||
<property name="use_action_appearance">False</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="receives_default">False</property>
|
||||||
|
@ -3121,7 +3154,6 @@ Requires a Hex value.</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCheckButton" id="chk_send_info">
|
<object class="GtkCheckButton" id="chk_send_info">
|
||||||
<property name="label" translatable="yes">Yes, please send anonymous statistics</property>
|
<property name="label" translatable="yes">Yes, please send anonymous statistics</property>
|
||||||
<property name="use_action_appearance">False</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="receives_default">False</property>
|
||||||
|
@ -3255,7 +3287,6 @@ Requires a Hex value.</property>
|
||||||
<property name="layout_style">start</property>
|
<property name="layout_style">start</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="button_associate_magnet">
|
<object class="GtkButton" id="button_associate_magnet">
|
||||||
<property name="use_action_appearance">False</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">True</property>
|
<property name="receives_default">True</property>
|
||||||
|
@ -3468,7 +3499,6 @@ Requires a Hex value.</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCheckButton" id="chk_allow_remote_connections">
|
<object class="GtkCheckButton" id="chk_allow_remote_connections">
|
||||||
<property name="label" translatable="yes">Allow Remote Connections</property>
|
<property name="label" translatable="yes">Allow Remote Connections</property>
|
||||||
<property name="use_action_appearance">False</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="receives_default">False</property>
|
||||||
|
@ -3510,7 +3540,6 @@ Requires a Hex value.</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCheckButton" id="chk_new_releases">
|
<object class="GtkCheckButton" id="chk_new_releases">
|
||||||
<property name="label" translatable="yes">Periodically check the website for new releases</property>
|
<property name="label" translatable="yes">Periodically check the website for new releases</property>
|
||||||
<property name="use_action_appearance">False</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="receives_default">False</property>
|
||||||
|
@ -3573,7 +3602,6 @@ Requires a Hex value.</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="accounts_add">
|
<object class="GtkButton" id="accounts_add">
|
||||||
<property name="label">gtk-add</property>
|
<property name="label">gtk-add</property>
|
||||||
<property name="use_action_appearance">False</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">True</property>
|
<property name="receives_default">True</property>
|
||||||
|
@ -3589,7 +3617,6 @@ Requires a Hex value.</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="accounts_edit">
|
<object class="GtkButton" id="accounts_edit">
|
||||||
<property name="label">gtk-edit</property>
|
<property name="label">gtk-edit</property>
|
||||||
<property name="use_action_appearance">False</property>
|
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="sensitive">False</property>
|
<property name="sensitive">False</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
|
@ -3606,7 +3633,6 @@ Requires a Hex value.</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="accounts_delete">
|
<object class="GtkButton" id="accounts_delete">
|
||||||
<property name="label">gtk-delete</property>
|
<property name="label">gtk-delete</property>
|
||||||
<property name="use_action_appearance">False</property>
|
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="sensitive">False</property>
|
<property name="sensitive">False</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
|
@ -3743,7 +3769,6 @@ Requires a Hex value.</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCheckButton" id="chk_queue_new_top">
|
<object class="GtkCheckButton" id="chk_queue_new_top">
|
||||||
<property name="label" translatable="yes">Queue new torrents to top</property>
|
<property name="label" translatable="yes">Queue new torrents to top</property>
|
||||||
<property name="use_action_appearance">False</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="receives_default">False</property>
|
||||||
|
@ -3816,7 +3841,7 @@ Requires a Hex value.</property>
|
||||||
<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"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -3837,7 +3862,7 @@ Requires a Hex value.</property>
|
||||||
<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"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -3882,7 +3907,7 @@ Requires a Hex value.</property>
|
||||||
<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"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -3908,7 +3933,6 @@ Requires a Hex value.</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCheckButton" id="chk_dont_count_slow_torrents">
|
<object class="GtkCheckButton" id="chk_dont_count_slow_torrents">
|
||||||
<property name="label" translatable="yes">Do not count slow torrents</property>
|
<property name="label" translatable="yes">Do not count slow torrents</property>
|
||||||
<property name="use_action_appearance">False</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="receives_default">False</property>
|
||||||
|
@ -3923,7 +3947,6 @@ Requires a Hex value.</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCheckButton" id="chk_auto_manage_prefer_seeds">
|
<object class="GtkCheckButton" id="chk_auto_manage_prefer_seeds">
|
||||||
<property name="label" translatable="yes">Prefer Seeding over Downloading</property>
|
<property name="label" translatable="yes">Prefer Seeding over Downloading</property>
|
||||||
<property name="use_action_appearance">False</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="receives_default">False</property>
|
||||||
|
@ -4033,7 +4056,7 @@ Requires a Hex value.</property>
|
||||||
<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"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -4054,7 +4077,7 @@ Requires a Hex value.</property>
|
||||||
<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"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -4074,7 +4097,7 @@ Requires a Hex value.</property>
|
||||||
<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"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
|
@ -4092,7 +4115,6 @@ Requires a Hex value.</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCheckButton" id="chk_seed_ratio">
|
<object class="GtkCheckButton" id="chk_seed_ratio">
|
||||||
<property name="label" translatable="yes">Stop seeding when share ratio reaches:</property>
|
<property name="label" translatable="yes">Stop seeding when share ratio reaches:</property>
|
||||||
<property name="use_action_appearance">False</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="receives_default">False</property>
|
||||||
|
@ -4140,7 +4162,6 @@ Requires a Hex value.</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkCheckButton" id="chk_remove_ratio">
|
<object class="GtkCheckButton" id="chk_remove_ratio">
|
||||||
<property name="label" translatable="yes">Remove torrent when share ratio reached</property>
|
<property name="label" translatable="yes">Remove torrent when share ratio reached</property>
|
||||||
<property name="use_action_appearance">False</property>
|
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="sensitive">False</property>
|
<property name="sensitive">False</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
|
@ -4412,7 +4433,7 @@ Requires a Hex value.</property>
|
||||||
<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">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>
|
||||||
|
@ -4424,7 +4445,7 @@ Requires a Hex value.</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>
|
||||||
|
@ -4617,7 +4638,7 @@ Requires a Hex value.</property>
|
||||||
<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">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>
|
||||||
|
@ -4629,7 +4650,7 @@ Requires a Hex value.</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>
|
||||||
|
@ -4822,7 +4843,7 @@ Requires a Hex value.</property>
|
||||||
<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">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>
|
||||||
|
@ -4834,7 +4855,7 @@ Requires a Hex value.</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>
|
||||||
|
@ -4901,7 +4922,7 @@ Requires a Hex value.</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">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>
|
||||||
|
@ -4934,7 +4955,7 @@ Requires a Hex value.</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">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>
|
||||||
|
@ -4965,7 +4986,7 @@ Requires a Hex value.</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="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>
|
||||||
|
@ -5030,7 +5051,7 @@ Requires a Hex value.</property>
|
||||||
<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">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>
|
||||||
|
@ -5042,7 +5063,7 @@ Requires a Hex value.</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>
|
||||||
|
@ -5056,7 +5077,7 @@ Requires a Hex value.</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">GTK_FILL</property>
|
<property name="x_options">GTK_FILL</property>
|
||||||
<property name="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
|
@ -5219,7 +5240,7 @@ Requires a Hex value.</property>
|
||||||
<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"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -5241,7 +5262,7 @@ Requires a Hex value.</property>
|
||||||
<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"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
|
@ -5349,7 +5370,7 @@ Requires a Hex value.</property>
|
||||||
<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"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -5363,7 +5384,7 @@ Requires a Hex value.</property>
|
||||||
<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"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -5377,7 +5398,7 @@ Requires a Hex value.</property>
|
||||||
<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"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
|
@ -5468,7 +5489,7 @@ Requires a Hex value.</property>
|
||||||
<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"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -5482,7 +5503,7 @@ Requires a Hex value.</property>
|
||||||
<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"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -5496,7 +5517,7 @@ Requires a Hex value.</property>
|
||||||
<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"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -5524,7 +5545,7 @@ Requires a Hex value.</property>
|
||||||
<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"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
|
@ -5600,7 +5621,7 @@ Requires a Hex value.</property>
|
||||||
<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"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -5614,7 +5635,7 @@ Requires a Hex value.</property>
|
||||||
<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"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
|
@ -5646,7 +5667,6 @@ Requires a Hex value.</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="button_cache_refresh">
|
<object class="GtkButton" id="button_cache_refresh">
|
||||||
<property name="label">gtk-refresh</property>
|
<property name="label">gtk-refresh</property>
|
||||||
<property name="use_action_appearance">False</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">True</property>
|
<property name="receives_default">True</property>
|
||||||
|
@ -5820,7 +5840,7 @@ Requires a Hex value.</property>
|
||||||
<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>
|
||||||
|
@ -5834,7 +5854,7 @@ Requires a Hex value.</property>
|
||||||
<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="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -5846,7 +5866,7 @@ Requires a Hex value.</property>
|
||||||
<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="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
@ -5875,7 +5895,7 @@ Requires a Hex value.</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">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>
|
||||||
|
@ -5887,7 +5907,7 @@ Requires a Hex value.</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>
|
||||||
|
@ -5929,7 +5949,7 @@ Requires a Hex value.</property>
|
||||||
<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>
|
||||||
|
@ -5943,7 +5963,7 @@ Requires a Hex value.</property>
|
||||||
<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="y_options"></property>
|
<property name="y_options"/>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
|
@ -5984,7 +6004,6 @@ Requires a Hex value.</property>
|
||||||
<property name="layout_style">center</property>
|
<property name="layout_style">center</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="button_plugin_install">
|
<object class="GtkButton" id="button_plugin_install">
|
||||||
<property name="use_action_appearance">False</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">True</property>
|
<property name="receives_default">True</property>
|
||||||
|
@ -6031,7 +6050,6 @@ Requires a Hex value.</property>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="button_rescan_plugins">
|
<object class="GtkButton" id="button_rescan_plugins">
|
||||||
<property name="use_action_appearance">False</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">True</property>
|
<property name="receives_default">True</property>
|
||||||
|
@ -6089,7 +6107,6 @@ Requires a Hex value.</property>
|
||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkButton" id="button_find_plugins">
|
<object class="GtkButton" id="button_find_plugins">
|
||||||
<property name="use_action_appearance">False</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">True</property>
|
<property name="receives_default">True</property>
|
||||||
|
|
|
@ -114,8 +114,8 @@ DEFAULT_PREFS = {
|
||||||
"pref_dialog_width": None,
|
"pref_dialog_width": None,
|
||||||
"pref_dialog_height": None,
|
"pref_dialog_height": None,
|
||||||
"window_pane_position": -1,
|
"window_pane_position": -1,
|
||||||
"tray_download_speed_list" : [5.0, 10.0, 30.0, 80.0, 300.0],
|
"tray_download_speed_list": [5.0, 10.0, 30.0, 80.0, 300.0],
|
||||||
"tray_upload_speed_list" : [5.0, 10.0, 30.0, 80.0, 300.0],
|
"tray_upload_speed_list": [5.0, 10.0, 30.0, 80.0, 300.0],
|
||||||
"connection_limit_list": [50, 100, 200, 300, 500],
|
"connection_limit_list": [50, 100, 200, 300, 500],
|
||||||
"enabled_plugins": [],
|
"enabled_plugins": [],
|
||||||
"show_connection_manager_on_start": True,
|
"show_connection_manager_on_start": True,
|
||||||
|
@ -151,18 +151,23 @@ DEFAULT_PREFS = {
|
||||||
"pieces_color_downloading": [65535, 55255, 0],
|
"pieces_color_downloading": [65535, 55255, 0],
|
||||||
"pieces_color_completed": [4883, 26985, 56540],
|
"pieces_color_completed": [4883, 26985, 56540],
|
||||||
"focus_main_window_on_add": True,
|
"focus_main_window_on_add": True,
|
||||||
|
"language": None,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
class GtkUI(object):
|
class GtkUI(object):
|
||||||
def __init__(self, args):
|
def __init__(self, args):
|
||||||
self.daemon_bps = (0,0,0)
|
self.daemon_bps = (0, 0, 0)
|
||||||
|
# Setup btkbuilder/glade translation
|
||||||
|
deluge.common.setup_translations(setup_gettext=False, setup_pygtk=True)
|
||||||
|
|
||||||
# Setup signals
|
# Setup signals
|
||||||
try:
|
try:
|
||||||
import gnome.ui
|
import gnome.ui
|
||||||
import gnome
|
import gnome
|
||||||
self.gnome_prog = gnome.init("Deluge", deluge.common.get_version())
|
self.gnome_prog = gnome.init("Deluge", deluge.common.get_version())
|
||||||
self.gnome_client = gnome.ui.master_client()
|
self.gnome_client = gnome.ui.master_client()
|
||||||
|
|
||||||
def on_die(*args):
|
def on_die(*args):
|
||||||
reactor.stop()
|
reactor.stop()
|
||||||
self.gnome_client.connect("die", on_die)
|
self.gnome_client.connect("die", on_die)
|
||||||
|
@ -174,6 +179,7 @@ class GtkUI(object):
|
||||||
from win32api import SetConsoleCtrlHandler
|
from win32api import SetConsoleCtrlHandler
|
||||||
from win32con import CTRL_CLOSE_EVENT
|
from win32con import CTRL_CLOSE_EVENT
|
||||||
from win32con import CTRL_SHUTDOWN_EVENT
|
from win32con import CTRL_SHUTDOWN_EVENT
|
||||||
|
|
||||||
def win_handler(ctrl_type):
|
def win_handler(ctrl_type):
|
||||||
log.debug("ctrl_type: %s", ctrl_type)
|
log.debug("ctrl_type: %s", ctrl_type)
|
||||||
if ctrl_type in (CTRL_CLOSE_EVENT, CTRL_SHUTDOWN_EVENT):
|
if ctrl_type in (CTRL_CLOSE_EVENT, CTRL_SHUTDOWN_EVENT):
|
||||||
|
@ -184,11 +190,11 @@ class GtkUI(object):
|
||||||
if deluge.common.osx_check() and gtk.gdk.WINDOWING == "quartz":
|
if deluge.common.osx_check() and gtk.gdk.WINDOWING == "quartz":
|
||||||
import gtkosx_application
|
import gtkosx_application
|
||||||
self.osxapp = gtkosx_application.gtkosx_application_get()
|
self.osxapp = gtkosx_application.gtkosx_application_get()
|
||||||
|
|
||||||
def on_die(*args):
|
def on_die(*args):
|
||||||
reactor.stop()
|
reactor.stop()
|
||||||
self.osxapp.connect("NSApplicationWillTerminate", on_die)
|
self.osxapp.connect("NSApplicationWillTerminate", on_die)
|
||||||
|
|
||||||
|
|
||||||
# Set process name again to fix gtk issue
|
# Set process name again to fix gtk issue
|
||||||
setproctitle(getproctitle())
|
setproctitle(getproctitle())
|
||||||
|
|
||||||
|
@ -207,6 +213,10 @@ class GtkUI(object):
|
||||||
# shutdown the daemon.
|
# shutdown the daemon.
|
||||||
self.started_in_classic = self.config["classic_mode"]
|
self.started_in_classic = self.config["classic_mode"]
|
||||||
|
|
||||||
|
# Set language
|
||||||
|
if not self.config["language"] is None:
|
||||||
|
deluge.common.set_language(self.config["language"])
|
||||||
|
|
||||||
# Start the IPC Interface before anything else.. Just in case we are
|
# Start the IPC Interface before anything else.. Just in case we are
|
||||||
# already running.
|
# already running.
|
||||||
self.queuedtorrents = QueuedTorrents()
|
self.queuedtorrents = QueuedTorrents()
|
||||||
|
@ -215,7 +225,6 @@ class GtkUI(object):
|
||||||
# Initialize gdk threading
|
# Initialize gdk threading
|
||||||
gtk.gdk.threads_init()
|
gtk.gdk.threads_init()
|
||||||
|
|
||||||
|
|
||||||
# We make sure that the UI components start once we get a core URI
|
# We make sure that the UI components start once we get a core URI
|
||||||
client.set_disconnect_callback(self.__on_disconnect)
|
client.set_disconnect_callback(self.__on_disconnect)
|
||||||
|
|
||||||
|
@ -327,8 +336,8 @@ You will either need to stop the daemon or turn off Classic Mode to continue."))
|
||||||
except ImportError, e:
|
except ImportError, e:
|
||||||
if "No module named libtorrent" in e.message:
|
if "No module named libtorrent" in e.message:
|
||||||
d = dialogs.YesNoDialog(
|
d = dialogs.YesNoDialog(
|
||||||
_("Enable Thin Client Mode?"),
|
_("Enable Thin Client Mode?"),
|
||||||
_("Thin client mode is only available because libtorrent is not installed.\n\n\
|
_("Thin client mode is only available because libtorrent is not installed.\n\n\
|
||||||
To use Deluge standalone (Classic mode) please install libtorrent.")).run()
|
To use Deluge standalone (Classic mode) please install libtorrent.")).run()
|
||||||
self.started_in_classic = False
|
self.started_in_classic = False
|
||||||
d.addCallback(on_dialog_response)
|
d.addCallback(on_dialog_response)
|
||||||
|
@ -344,10 +353,12 @@ To use Deluge standalone (Classic mode) please install libtorrent.")).run()
|
||||||
_("Error Starting Core"),
|
_("Error Starting Core"),
|
||||||
_("There was an error starting the core component which is required to run Deluge in Classic Mode.\n\n\
|
_("There was an error starting the core component which is required to run Deluge in Classic Mode.\n\n\
|
||||||
Please see the details below for more information."), details=traceback.format_exc(tb[2])).run()
|
Please see the details below for more information."), details=traceback.format_exc(tb[2])).run()
|
||||||
|
|
||||||
def on_ed_response(response):
|
def on_ed_response(response):
|
||||||
d = dialogs.YesNoDialog(
|
d = dialogs.YesNoDialog(
|
||||||
_("Turn off Classic Mode?"),
|
_("Turn off Classic Mode?"),
|
||||||
_("Since there was an error starting in Classic Mode would you like to continue by turning it off?")).run()
|
_("Since there was an error starting in Classic Mode would you like to continue by turning it off?")
|
||||||
|
).run()
|
||||||
self.started_in_classic = False
|
self.started_in_classic = False
|
||||||
d.addCallback(on_dialog_response)
|
d.addCallback(on_dialog_response)
|
||||||
ed.addCallback(on_ed_response)
|
ed.addCallback(on_ed_response)
|
||||||
|
@ -406,6 +417,7 @@ Please see the details below for more information."), details=traceback.format_e
|
||||||
dialog = dialogs.AuthenticationDialog(
|
dialog = dialogs.AuthenticationDialog(
|
||||||
reason.value.message, reason.value.username
|
reason.value.message, reason.value.username
|
||||||
)
|
)
|
||||||
|
|
||||||
def dialog_finished(response_id, host, port):
|
def dialog_finished(response_id, host, port):
|
||||||
if response_id == gtk.RESPONSE_OK:
|
if response_id == gtk.RESPONSE_OK:
|
||||||
reactor.callLater(
|
reactor.callLater(
|
||||||
|
@ -446,7 +458,6 @@ Please see the details below for more information."), details=traceback.format_e
|
||||||
reactor.simulate()
|
reactor.simulate()
|
||||||
self.connectionmanager.show()
|
self.connectionmanager.show()
|
||||||
|
|
||||||
|
|
||||||
def __on_disconnect(self):
|
def __on_disconnect(self):
|
||||||
"""
|
"""
|
||||||
Called when disconnected from the daemon. We basically just stop all
|
Called when disconnected from the daemon. We basically just stop all
|
||||||
|
|
|
@ -17,9 +17,9 @@
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with deluge. If not, write to:
|
# along with deluge. If not, write to:
|
||||||
# The Free Software Foundation, Inc.,
|
# The Free Software Foundation, Inc.,
|
||||||
# 51 Franklin Street, Fifth Floor
|
# 51 Franklin Street, Fifth Floor
|
||||||
# Boston, MA 02110-1301, USA.
|
# Boston, MA 02110-1301, USA.
|
||||||
#
|
#
|
||||||
# In addition, as a special exception, the copyright holders give
|
# In addition, as a special exception, the copyright holders give
|
||||||
# permission to link the code of portions of this program with the OpenSSL
|
# permission to link the code of portions of this program with the OpenSSL
|
||||||
|
@ -32,66 +32,69 @@
|
||||||
# statement from all source files in the program, then also delete it here.
|
# statement from all source files in the program, then also delete it here.
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
import gtk, gtk.glade
|
import gtk
|
||||||
|
|
||||||
from deluge.configmanager import ConfigManager
|
from deluge.configmanager import ConfigManager
|
||||||
|
|
||||||
|
|
||||||
def accel_swap(item, group, skey, smod, dkey, dmod):
|
def accel_swap(item, group, skey, smod, dkey, dmod):
|
||||||
item.remove_accelerator(group, ord(skey), smod)
|
item.remove_accelerator(group, ord(skey), smod)
|
||||||
item.add_accelerator("activate", group, ord(dkey), dmod, gtk.ACCEL_VISIBLE)
|
item.add_accelerator("activate", group, ord(dkey), dmod, gtk.ACCEL_VISIBLE)
|
||||||
|
|
||||||
|
|
||||||
def accel_meta(item, group, key):
|
def accel_meta(item, group, key):
|
||||||
accel_swap(item, group, key, gtk.gdk.CONTROL_MASK, key, gtk.gdk.META_MASK)
|
accel_swap(item, group, key, gtk.gdk.CONTROL_MASK, key, gtk.gdk.META_MASK)
|
||||||
|
|
||||||
|
|
||||||
def menubar_osx(gtkui, osxapp):
|
def menubar_osx(gtkui, osxapp):
|
||||||
window = gtkui.mainwindow
|
window = gtkui.mainwindow
|
||||||
glade = window.main_glade
|
main_builder = window.get_builder()
|
||||||
menubar = glade.get_widget("menubar")
|
menubar = main_builder.get_object("menubar")
|
||||||
group = gtk.accel_groups_from_object(window.window)[0]
|
group = gtk.accel_groups_from_object(window.window)[0]
|
||||||
|
|
||||||
config = ConfigManager("gtkui.conf")
|
config = ConfigManager("gtkui.conf")
|
||||||
|
|
||||||
# NOTE: accel maps doesn't work with glade file format
|
# NOTE: accel maps doesn't work with glade file format
|
||||||
# because of libglade not setting MenuItem accel groups
|
# because of libglade not setting MenuItem accel groups
|
||||||
# That's why we remove / set accelerators by hand... (dirty)
|
# That's why we remove / set accelerators by hand... (dirty)
|
||||||
# Clean solution: migrate glades files to gtkbuilder format
|
# Clean solution: migrate glades files to gtkbuilder format
|
||||||
file_menu = glade.get_widget("menu_file").get_submenu()
|
file_menu = main_builder.get_object("menu_file").get_submenu()
|
||||||
file_items = file_menu.get_children()
|
file_items = file_menu.get_children()
|
||||||
accel_meta(file_items[0], group, 'o')
|
accel_meta(file_items[0], group, 'o')
|
||||||
accel_meta(file_items[1], group, 'n')
|
accel_meta(file_items[1], group, 'n')
|
||||||
quit_all_item = file_items[3]
|
quit_all_item = file_items[3]
|
||||||
accel_swap(quit_all_item, group, 'q', gtk.gdk.SHIFT_MASK | gtk.gdk.CONTROL_MASK,
|
accel_swap(quit_all_item, group, 'q', gtk.gdk.SHIFT_MASK | gtk.gdk.CONTROL_MASK,
|
||||||
'q', gtk.gdk.SHIFT_MASK | gtk.gdk.META_MASK)
|
'q', gtk.gdk.SHIFT_MASK | gtk.gdk.META_MASK)
|
||||||
for item in range(2, len(file_items)): # remove quits
|
for item in range(2, len(file_items)): # remove quits
|
||||||
file_menu.remove(file_items[item])
|
file_menu.remove(file_items[item])
|
||||||
|
|
||||||
menu_widget = glade.get_widget("menu_edit")
|
menu_widget = main_builder.get_object("menu_edit")
|
||||||
edit_menu = menu_widget.get_submenu()
|
edit_menu = menu_widget.get_submenu()
|
||||||
edit_items = edit_menu.get_children()
|
edit_items = edit_menu.get_children()
|
||||||
pref_item = edit_items[0]
|
pref_item = edit_items[0]
|
||||||
accel_swap(pref_item, group, 'p', gtk.gdk.CONTROL_MASK, ',', gtk.gdk.META_MASK)
|
accel_swap(pref_item, group, 'p', gtk.gdk.CONTROL_MASK, ',', gtk.gdk.META_MASK)
|
||||||
edit_menu.remove(pref_item)
|
edit_menu.remove(pref_item)
|
||||||
|
|
||||||
conn_item = edit_items[1]
|
conn_item = edit_items[1]
|
||||||
accel_meta(conn_item, group, 'm')
|
accel_meta(conn_item, group, 'm')
|
||||||
edit_menu.remove(conn_item)
|
edit_menu.remove(conn_item)
|
||||||
|
|
||||||
menubar.remove(menu_widget)
|
menubar.remove(menu_widget)
|
||||||
|
|
||||||
help_menu = glade.get_widget("menu_help").get_submenu()
|
help_menu = main_builder.get_object("menu_help").get_submenu()
|
||||||
help_items = help_menu.get_children()
|
help_items = help_menu.get_children()
|
||||||
about_item = help_items[4]
|
about_item = help_items[4]
|
||||||
help_menu.remove(about_item)
|
help_menu.remove(about_item)
|
||||||
help_menu.remove(help_items[3]) # separator
|
help_menu.remove(help_items[3]) # separator
|
||||||
|
|
||||||
menubar.hide()
|
menubar.hide()
|
||||||
osxapp.set_menu_bar(menubar)
|
osxapp.set_menu_bar(menubar)
|
||||||
# populate app menu
|
# populate app menu
|
||||||
osxapp.insert_app_menu_item(about_item, 0)
|
osxapp.insert_app_menu_item(about_item, 0)
|
||||||
osxapp.insert_app_menu_item(gtk.SeparatorMenuItem(), 1)
|
osxapp.insert_app_menu_item(gtk.SeparatorMenuItem(), 1)
|
||||||
osxapp.insert_app_menu_item(pref_item, 2)
|
osxapp.insert_app_menu_item(pref_item, 2)
|
||||||
if not config["classic_mode"]:
|
if not config["classic_mode"]:
|
||||||
osxapp.insert_app_menu_item(conn_item, 3)
|
osxapp.insert_app_menu_item(conn_item, 3)
|
||||||
if quit_all_item.get_visible():
|
if quit_all_item.get_visible():
|
||||||
osxapp.insert_app_menu_item(gtk.SeparatorMenuItem(), 4)
|
osxapp.insert_app_menu_item(gtk.SeparatorMenuItem(), 4)
|
||||||
osxapp.insert_app_menu_item(quit_all_item, 5)
|
osxapp.insert_app_menu_item(quit_all_item, 5)
|
||||||
|
|
|
@ -62,6 +62,7 @@ COLOR_STATES = {
|
||||||
"completed": COLOR_COMPLETED
|
"completed": COLOR_COMPLETED
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
class Preferences(component.Component):
|
class Preferences(component.Component):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
component.Component.__init__(self, "Preferences")
|
component.Component.__init__(self, "Preferences")
|
||||||
|
@ -180,6 +181,7 @@ class Preferences(component.Component):
|
||||||
"on_missing_color_set": self._on_missing_color_set,
|
"on_missing_color_set": self._on_missing_color_set,
|
||||||
"on_revert_color_missing_clicked": self._on_revert_color_missing_clicked,
|
"on_revert_color_missing_clicked": self._on_revert_color_missing_clicked,
|
||||||
"on_pref_dialog_configure_event": self.on_pref_dialog_configure_event,
|
"on_pref_dialog_configure_event": self.on_pref_dialog_configure_event,
|
||||||
|
"on_checkbutton_language_toggled": self._on_checkbutton_language_toggled,
|
||||||
})
|
})
|
||||||
|
|
||||||
from deluge.ui.gtkui.gtkui import DEFAULT_PREFS
|
from deluge.ui.gtkui.gtkui import DEFAULT_PREFS
|
||||||
|
@ -193,6 +195,7 @@ class Preferences(component.Component):
|
||||||
self.enabled_plugins = []
|
self.enabled_plugins = []
|
||||||
|
|
||||||
self.setup_path_choosers()
|
self.setup_path_choosers()
|
||||||
|
self.load_languages()
|
||||||
|
|
||||||
def setup_path_choosers(self):
|
def setup_path_choosers(self):
|
||||||
self.download_location_hbox = self.builder.get_object("hbox_download_to_path_chooser")
|
self.download_location_hbox = self.builder.get_object("hbox_download_to_path_chooser")
|
||||||
|
@ -210,6 +213,31 @@ class Preferences(component.Component):
|
||||||
self.copy_torrents_to_hbox.add(self.copy_torrent_files_path_chooser)
|
self.copy_torrents_to_hbox.add(self.copy_torrent_files_path_chooser)
|
||||||
self.copy_torrents_to_hbox.show_all()
|
self.copy_torrents_to_hbox.show_all()
|
||||||
|
|
||||||
|
def load_languages(self):
|
||||||
|
from deluge.ui import languages # Import here so that gettext has been setup first
|
||||||
|
translations_path = deluge.common.get_translations_path()
|
||||||
|
for root, dirs, files in os.walk(translations_path):
|
||||||
|
# Get the dirs
|
||||||
|
break
|
||||||
|
self.language_combo = self.builder.get_object("combobox_language")
|
||||||
|
self.language_checkbox = self.builder.get_object("checkbutton_language")
|
||||||
|
lang_model = self.language_combo.get_model()
|
||||||
|
|
||||||
|
index = -1
|
||||||
|
for i, lang_code in enumerate(sorted(dirs)):
|
||||||
|
name = "%s (Language name missing)" % lang_code
|
||||||
|
if lang_code in languages.LANGUAGES:
|
||||||
|
name = languages.LANGUAGES[lang_code]
|
||||||
|
lang_model.append([lang_code, name])
|
||||||
|
if self.gtkui_config["language"] == lang_code:
|
||||||
|
index = i
|
||||||
|
|
||||||
|
if self.gtkui_config["language"] is None:
|
||||||
|
self.language_checkbox.set_active(True)
|
||||||
|
self.language_combo.set_sensitive(False)
|
||||||
|
elif index != -1:
|
||||||
|
self.language_combo.set_active(index)
|
||||||
|
|
||||||
def __del__(self):
|
def __del__(self):
|
||||||
del self.gtkui_config
|
del self.gtkui_config
|
||||||
|
|
||||||
|
@ -260,9 +288,9 @@ class Preferences(component.Component):
|
||||||
|
|
||||||
self.liststore.foreach(check_row, name)
|
self.liststore.foreach(check_row, name)
|
||||||
# Remove the page and row
|
# Remove the page and row
|
||||||
if self.page_num_to_remove != None:
|
if self.page_num_to_remove is not None:
|
||||||
self.notebook.remove_page(self.page_num_to_remove)
|
self.notebook.remove_page(self.page_num_to_remove)
|
||||||
if self.iter_to_remove != None:
|
if self.iter_to_remove is not None:
|
||||||
self.liststore.remove(self.iter_to_remove)
|
self.liststore.remove(self.iter_to_remove)
|
||||||
|
|
||||||
# We need to re-adjust the index values for the remaining pages
|
# We need to re-adjust the index values for the remaining pages
|
||||||
|
@ -273,7 +301,7 @@ class Preferences(component.Component):
|
||||||
"""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
|
self.window_open = True
|
||||||
if page != None:
|
if page is not None:
|
||||||
for (index, string) in self.liststore:
|
for (index, string) in self.liststore:
|
||||||
if page == string:
|
if page == string:
|
||||||
self.treeview.get_selection().select_path(index)
|
self.treeview.get_selection().select_path(index)
|
||||||
|
@ -321,7 +349,7 @@ class Preferences(component.Component):
|
||||||
self._show()
|
self._show()
|
||||||
|
|
||||||
def _show(self):
|
def _show(self):
|
||||||
self.is_connected = self.core_config != {} and self.core_config != None
|
self.is_connected = self.core_config != {} and self.core_config is not None
|
||||||
core_widgets = {
|
core_widgets = {
|
||||||
"chk_move_completed": ("active", "move_completed"),
|
"chk_move_completed": ("active", "move_completed"),
|
||||||
"chk_copy_torrent_file": ("active", "copy_torrent_file"),
|
"chk_copy_torrent_file": ("active", "copy_torrent_file"),
|
||||||
|
@ -430,7 +458,7 @@ class Preferences(component.Component):
|
||||||
elif type(value) is str:
|
elif type(value) is str:
|
||||||
value = self.core_config[value]
|
value = self.core_config[value]
|
||||||
elif modifier:
|
elif modifier:
|
||||||
value = {"active": False, "not_active": False, "value": 0, "text": "", "path_chooser": "" }[modifier]
|
value = {"active": False, "not_active": False, "value": 0, "text": "", "path_chooser": ""}[modifier]
|
||||||
|
|
||||||
if modifier == "active":
|
if modifier == "active":
|
||||||
widget.set_active(value)
|
widget.set_active(value)
|
||||||
|
@ -644,8 +672,7 @@ class Preferences(component.Component):
|
||||||
self.builder.get_object("chk_enable_appindicator").get_active()
|
self.builder.get_object("chk_enable_appindicator").get_active()
|
||||||
new_gtkui_config["lock_tray"] = \
|
new_gtkui_config["lock_tray"] = \
|
||||||
self.builder.get_object("chk_lock_tray").get_active()
|
self.builder.get_object("chk_lock_tray").get_active()
|
||||||
passhex = sha_hash(\
|
passhex = sha_hash(self.builder.get_object("txt_tray_password").get_text()).hexdigest()
|
||||||
self.builder.get_object("txt_tray_password").get_text()).hexdigest()
|
|
||||||
if passhex != "c07eb5a8c0dc7bb81c217b67f11c3b7a5e95ffd7":
|
if passhex != "c07eb5a8c0dc7bb81c217b67f11c3b7a5e95ffd7":
|
||||||
new_gtkui_config["tray_password"] = passhex
|
new_gtkui_config["tray_password"] = passhex
|
||||||
|
|
||||||
|
@ -723,6 +750,29 @@ class Preferences(component.Component):
|
||||||
# Run plugin hook to apply preferences
|
# Run plugin hook to apply preferences
|
||||||
component.get("PluginManager").run_on_apply_prefs()
|
component.get("PluginManager").run_on_apply_prefs()
|
||||||
|
|
||||||
|
# Lanuage
|
||||||
|
if self.language_checkbox.get_active():
|
||||||
|
new_gtkui_config["language"] = None
|
||||||
|
else:
|
||||||
|
active = self.language_combo.get_active()
|
||||||
|
if active == -1:
|
||||||
|
dialog = dialogs.InformationDialog(
|
||||||
|
_("Attention"),
|
||||||
|
_("You must choose a language")
|
||||||
|
)
|
||||||
|
dialog.run()
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
model = self.language_combo.get_model()
|
||||||
|
new_gtkui_config["language"] = model.get(model.get_iter(active), 0)[0]
|
||||||
|
|
||||||
|
if new_gtkui_config["language"] != self.gtkui_config["language"]:
|
||||||
|
dialog = dialogs.InformationDialog(
|
||||||
|
_("Attention"),
|
||||||
|
_("You must now restart the deluge UI for the changes to take effect.")
|
||||||
|
)
|
||||||
|
dialog.run()
|
||||||
|
|
||||||
# GtkUI
|
# GtkUI
|
||||||
for key in new_gtkui_config.keys():
|
for key in new_gtkui_config.keys():
|
||||||
# The values do not match so this needs to be updated
|
# The values do not match so this needs to be updated
|
||||||
|
@ -751,7 +801,7 @@ class Preferences(component.Component):
|
||||||
# Re-show the dialog to make sure everything has been updated
|
# Re-show the dialog to make sure everything has been updated
|
||||||
self.show()
|
self.show()
|
||||||
|
|
||||||
if classic_mode_was_set == True and new_gtkui_in_classic_mode == False:
|
if classic_mode_was_set and not new_gtkui_in_classic_mode:
|
||||||
def on_response(response):
|
def on_response(response):
|
||||||
if response == gtk.RESPONSE_NO:
|
if response == gtk.RESPONSE_NO:
|
||||||
# Set each changed config value in the core
|
# Set each changed config value in the core
|
||||||
|
@ -766,7 +816,7 @@ class Preferences(component.Component):
|
||||||
_("Your current session will be stopped. Continue?")
|
_("Your current session will be stopped. Continue?")
|
||||||
)
|
)
|
||||||
dialog.run().addCallback(on_response)
|
dialog.run().addCallback(on_response)
|
||||||
elif classic_mode_was_set == False and new_gtkui_in_classic_mode == True:
|
elif not classic_mode_was_set and new_gtkui_in_classic_mode:
|
||||||
dialog = dialogs.InformationDialog(
|
dialog = dialogs.InformationDialog(
|
||||||
_("Attention"),
|
_("Attention"),
|
||||||
_("You must now restart the deluge UI")
|
_("You must now restart the deluge UI")
|
||||||
|
@ -807,7 +857,7 @@ class Preferences(component.Component):
|
||||||
def load_pref_dialog_state(self):
|
def load_pref_dialog_state(self):
|
||||||
w = self.gtkui_config["pref_dialog_width"]
|
w = self.gtkui_config["pref_dialog_width"]
|
||||||
h = self.gtkui_config["pref_dialog_height"]
|
h = self.gtkui_config["pref_dialog_height"]
|
||||||
if w != None and h != None:
|
if w is not None and h is not None:
|
||||||
self.pref_dialog.resize(w, h)
|
self.pref_dialog.resize(w, h)
|
||||||
|
|
||||||
def on_pref_dialog_configure_event(self, widget, event):
|
def on_pref_dialog_configure_event(self, widget, event):
|
||||||
|
@ -827,25 +877,25 @@ class Preferences(component.Component):
|
||||||
}
|
}
|
||||||
|
|
||||||
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,
|
||||||
"spin_port_max": False},
|
"spin_port_max": False},
|
||||||
"chk_random_outgoing_ports": {"spin_outgoing_port_min": False,
|
"chk_random_outgoing_ports": {"spin_outgoing_port_min": False,
|
||||||
"spin_outgoing_port_max": False},
|
"spin_outgoing_port_max": False},
|
||||||
"chk_use_tray": {"chk_min_on_close": True,
|
"chk_use_tray": {"chk_min_on_close": True,
|
||||||
"chk_start_in_tray": True,
|
"chk_start_in_tray": True,
|
||||||
"chk_enable_appindicator": True,
|
"chk_enable_appindicator": True,
|
||||||
"chk_lock_tray": True},
|
"chk_lock_tray": True},
|
||||||
"chk_lock_tray": {"txt_tray_password": True,
|
"chk_lock_tray": {"txt_tray_password": True,
|
||||||
"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_chooser" : True},
|
"chk_move_completed": {"move_completed_path_chooser": True},
|
||||||
"chk_copy_torrent_file" : {"torrentfiles_location_path_chooser" : 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}
|
||||||
}
|
}
|
||||||
|
|
||||||
def update_dependent_widgets(name, value):
|
def update_dependent_widgets(name, value):
|
||||||
dependency = dependents[name]
|
dependency = dependents[name]
|
||||||
|
@ -935,11 +985,13 @@ class Preferences(component.Component):
|
||||||
|
|
||||||
def _on_button_plugin_install_clicked(self, widget):
|
def _on_button_plugin_install_clicked(self, widget):
|
||||||
log.debug("_on_button_plugin_install_clicked")
|
log.debug("_on_button_plugin_install_clicked")
|
||||||
chooser = gtk.FileChooserDialog(_("Select the Plugin"),
|
chooser = gtk.FileChooserDialog(
|
||||||
|
_("Select the Plugin"),
|
||||||
self.pref_dialog,
|
self.pref_dialog,
|
||||||
gtk.FILE_CHOOSER_ACTION_OPEN,
|
gtk.FILE_CHOOSER_ACTION_OPEN,
|
||||||
buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN,
|
buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN,
|
||||||
gtk.RESPONSE_OK))
|
gtk.RESPONSE_OK)
|
||||||
|
)
|
||||||
|
|
||||||
chooser.set_transient_for(self.pref_dialog)
|
chooser.set_transient_for(self.pref_dialog)
|
||||||
chooser.set_select_multiple(False)
|
chooser.set_select_multiple(False)
|
||||||
|
@ -1029,7 +1081,6 @@ class Preferences(component.Component):
|
||||||
def _on_button_associate_magnet_clicked(self, widget):
|
def _on_button_associate_magnet_clicked(self, widget):
|
||||||
common.associate_magnet_links(True)
|
common.associate_magnet_links(True)
|
||||||
|
|
||||||
|
|
||||||
def _get_accounts_tab_data(self):
|
def _get_accounts_tab_data(self):
|
||||||
def on_ok(accounts):
|
def on_ok(accounts):
|
||||||
self.accounts_frame.show()
|
self.accounts_frame.show()
|
||||||
|
@ -1151,7 +1202,7 @@ class Preferences(component.Component):
|
||||||
dialogs.ErrorDialog(
|
dialogs.ErrorDialog(
|
||||||
_("Error Updating Account"),
|
_("Error Updating Account"),
|
||||||
_("An error ocurred while updating account"),
|
_("An error ocurred while updating account"),
|
||||||
parent=self.pref_dialog, details=failure.getErrorMessage()
|
parent=self.pref_dialog, details=failure.getErrorMessage()
|
||||||
).run()
|
).run()
|
||||||
|
|
||||||
if response_id == gtk.RESPONSE_OK:
|
if response_id == gtk.RESPONSE_OK:
|
||||||
|
@ -1207,6 +1258,9 @@ class Preferences(component.Component):
|
||||||
colors_widget = self.builder.get_object("piecebar_colors_expander")
|
colors_widget = self.builder.get_object("piecebar_colors_expander")
|
||||||
colors_widget.set_visible(widget.get_active())
|
colors_widget.set_visible(widget.get_active())
|
||||||
|
|
||||||
|
def _on_checkbutton_language_toggled(self, widget):
|
||||||
|
self.language_combo.set_sensitive(not self.language_checkbox.get_active())
|
||||||
|
|
||||||
def _on_completed_color_set(self, widget):
|
def _on_completed_color_set(self, widget):
|
||||||
self.__set_color("completed")
|
self.__set_color("completed")
|
||||||
|
|
||||||
|
|
105
deluge/ui/languages.py
Normal file
105
deluge/ui/languages.py
Normal file
|
@ -0,0 +1,105 @@
|
||||||
|
#
|
||||||
|
# languages.py
|
||||||
|
#
|
||||||
|
# This file is public domain.
|
||||||
|
#
|
||||||
|
|
||||||
|
# Language code for this installation. All choices can be found here:
|
||||||
|
# http://www.i18nguy.com/unicode/language-identifiers.html
|
||||||
|
LANGUAGE_CODE = 'en-us'
|
||||||
|
|
||||||
|
# Languages we provide translations for, out of the box.
|
||||||
|
LANGUAGES = {
|
||||||
|
'af': _('Afrikaans'),
|
||||||
|
'ar': _('Arabic'),
|
||||||
|
'ast': _('Asturian'),
|
||||||
|
'az': _('Azerbaijani'),
|
||||||
|
'bg': _('Bulgarian'),
|
||||||
|
'be': _('Belarusian'),
|
||||||
|
'bn': _('Bengali'),
|
||||||
|
'br': _('Breton'),
|
||||||
|
'bs': _('Bosnian'),
|
||||||
|
'ca': _('Catalan'),
|
||||||
|
'cs': _('Czech'),
|
||||||
|
'cy': _('Welsh'),
|
||||||
|
'da': _('Danish'),
|
||||||
|
'de': _('German'),
|
||||||
|
'el': _('Greek'),
|
||||||
|
'en': _('English'),
|
||||||
|
'en_AU': _('English (Australia)'),
|
||||||
|
'en_CA': _('English (Canada)'),
|
||||||
|
'en_GB': _('English (United Kingdom)'),
|
||||||
|
'eo': _('Esperanto'),
|
||||||
|
'es': _('Spanish'),
|
||||||
|
'es-ar': _('Argentinian Spanish'),
|
||||||
|
'es-mx': _('Mexican Spanish'),
|
||||||
|
'es-ni': _('Nicaraguan Spanish'),
|
||||||
|
'es-ve': _('Venezuelan Spanish'),
|
||||||
|
'et': _('Estonian'),
|
||||||
|
'eu': _('Basque'),
|
||||||
|
'fa': _('Persian'),
|
||||||
|
'fi': _('Finnish'),
|
||||||
|
'fr': _('French'),
|
||||||
|
'fy': _('Frisian'),
|
||||||
|
'ga': _('Irish'),
|
||||||
|
'gl': _('Galician'),
|
||||||
|
'he': _('Hebrew'),
|
||||||
|
'hi': _('Hindi'),
|
||||||
|
'hr': _('Croatian'),
|
||||||
|
'hu': _('Hungarian'),
|
||||||
|
'ia': _('Interlingua'),
|
||||||
|
'id': _('Indonesian'),
|
||||||
|
'is': _('Icelandic'),
|
||||||
|
'it': _('Italian'),
|
||||||
|
'ja': _('Japanese'),
|
||||||
|
'ka': _('Georgian'),
|
||||||
|
'kk': _('Kazakh'),
|
||||||
|
'km': _('Khmer'),
|
||||||
|
'kn': _('Kannada'),
|
||||||
|
'ko': _('Korean'),
|
||||||
|
'la': _('Latin'),
|
||||||
|
'lb': _('Luxembourgish'),
|
||||||
|
'lt': _('Lithuanian'),
|
||||||
|
'lv': _('Latvian'),
|
||||||
|
'mk': _('Macedonian'),
|
||||||
|
'ml': _('Malayalam'),
|
||||||
|
'mn': _('Mongolian'),
|
||||||
|
'ms': _('Mayaly'),
|
||||||
|
'my': _('Burmese'),
|
||||||
|
'nb': _('Norwegian Bokmal'),
|
||||||
|
'ne': _('Nepali'),
|
||||||
|
'nds': _('Low German'),
|
||||||
|
'nl': _('Dutch'),
|
||||||
|
'nn': _('Norwegian Nynorsk'),
|
||||||
|
'os': _('Ossetic'),
|
||||||
|
'pa': _('Punjabi'),
|
||||||
|
'pl': _('Polish'),
|
||||||
|
'pms': _('Piedmontese'),
|
||||||
|
'pt': _('Portuguese'),
|
||||||
|
'pt_BR': _('Brazilian Portuguese'),
|
||||||
|
'ro': _('Romanian'),
|
||||||
|
'ru': _('Russian'),
|
||||||
|
'sk': _('Slovak'),
|
||||||
|
'sl': _('Slovenian'),
|
||||||
|
'sq': _('Albanian'),
|
||||||
|
'sr': _('Serbian'),
|
||||||
|
'sr-latn': _('Serbian Latin'),
|
||||||
|
'sv': _('Swedish'),
|
||||||
|
'sw': _('Swahili'),
|
||||||
|
'ta': _('Tamil'),
|
||||||
|
'te': _('Telugu'),
|
||||||
|
'th': _('Thai'),
|
||||||
|
'tl': _('Tagalog'),
|
||||||
|
'tlh': _('Klingon'),
|
||||||
|
'tr': _('Turkish'),
|
||||||
|
'tt': _('Tatar'),
|
||||||
|
'udm': _('Udmurt'),
|
||||||
|
'uk': _('Ukrainian'),
|
||||||
|
'ur': _('Urdu'),
|
||||||
|
'vi': _('Vietnamese'),
|
||||||
|
'zh_CN': _('Chinese (Simplified)'),
|
||||||
|
'zh_HK': _('Chinese (Hong Kong)'),
|
||||||
|
'zh-hans': _('Simplified Chinese'),
|
||||||
|
'zh-hant': _('Traditional Chinese'),
|
||||||
|
'zh_TW': _('Chinese (Taiwan)'),
|
||||||
|
}
|
|
@ -47,6 +47,7 @@ try:
|
||||||
except ImportError:
|
except ImportError:
|
||||||
setproctitle = lambda t: None
|
setproctitle = lambda t: None
|
||||||
|
|
||||||
|
|
||||||
def version_callback(option, opt_str, value, parser):
|
def version_callback(option, opt_str, value, parser):
|
||||||
print os.path.basename(sys.argv[0]) + ": " + deluge.common.get_version()
|
print os.path.basename(sys.argv[0]) + ": " + deluge.common.get_version()
|
||||||
try:
|
try:
|
||||||
|
@ -64,20 +65,16 @@ if 'dev' not in deluge.common.get_version():
|
||||||
import warnings
|
import warnings
|
||||||
warnings.filterwarnings('ignore', category=DeprecationWarning, module='twisted')
|
warnings.filterwarnings('ignore', category=DeprecationWarning, module='twisted')
|
||||||
|
|
||||||
|
|
||||||
class _UI(object):
|
class _UI(object):
|
||||||
|
|
||||||
def __init__(self, name="gtk"):
|
def __init__(self, name="gtk"):
|
||||||
self.__name = name
|
self.__name = name
|
||||||
|
|
||||||
if name == "gtk":
|
|
||||||
deluge.common.setup_translations(setup_pygtk=True)
|
|
||||||
else:
|
|
||||||
deluge.common.setup_translations()
|
|
||||||
|
|
||||||
self.__parser = OptionParser(usage="%prog [options] [actions]")
|
self.__parser = OptionParser(usage="%prog [options] [actions]")
|
||||||
self.__parser.add_option("-v", "--version", action="callback", callback=version_callback,
|
self.__parser.add_option("-v", "--version", action="callback", callback=version_callback,
|
||||||
help="Show program's version number and exit")
|
help="Show program's version number and exit")
|
||||||
group = OptionGroup(self.__parser, _("Common Options"))
|
group = OptionGroup(self.__parser, "Common Options")
|
||||||
group.add_option("-c", "--config", dest="config",
|
group.add_option("-c", "--config", dest="config",
|
||||||
help="Set the config folder location", action="store", type="str")
|
help="Set the config folder location", action="store", type="str")
|
||||||
group.add_option("-l", "--logfile", dest="logfile",
|
group.add_option("-l", "--logfile", dest="logfile",
|
||||||
|
@ -133,6 +130,9 @@ class _UI(object):
|
||||||
log.error("There was an error setting the config dir! Exiting..")
|
log.error("There was an error setting the config dir! Exiting..")
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
# Setup gettext
|
||||||
|
deluge.common.setup_translations()
|
||||||
|
|
||||||
setproctitle("deluge-%s" % self.__name)
|
setproctitle("deluge-%s" % self.__name)
|
||||||
|
|
||||||
log.info("Deluge ui %s", deluge.common.get_version())
|
log.info("Deluge ui %s", deluge.common.get_version())
|
||||||
|
@ -140,12 +140,16 @@ class _UI(object):
|
||||||
log.debug("args: %s", self.__args)
|
log.debug("args: %s", self.__args)
|
||||||
log.info("Starting %s ui..", self.__name)
|
log.info("Starting %s ui..", self.__name)
|
||||||
|
|
||||||
|
|
||||||
class UI:
|
class UI:
|
||||||
def __init__(self, options, args, ui_args):
|
def __init__(self, options, args, ui_args):
|
||||||
import logging
|
import logging
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
log.debug("UI init..")
|
log.debug("UI init..")
|
||||||
|
|
||||||
|
# Setup gettext
|
||||||
|
deluge.common.setup_translations()
|
||||||
|
|
||||||
# Set the config directory
|
# Set the config directory
|
||||||
deluge.configmanager.set_config_dir(options.config)
|
deluge.configmanager.set_config_dir(options.config)
|
||||||
|
|
||||||
|
@ -181,7 +185,8 @@ class UI:
|
||||||
stack = traceback.extract_tb(tb)
|
stack = traceback.extract_tb(tb)
|
||||||
last_frame = stack[-1]
|
last_frame = stack[-1]
|
||||||
if last_frame[0] == __file__:
|
if last_frame[0] == __file__:
|
||||||
log.error("Unable to find the requested UI: %s. Please select a different UI with the '-u' option or alternatively use the '-s' option to select a different default UI.", selected_ui)
|
log.error("Unable to find the requested UI: %s. Please select a different UI with the '-u' option \
|
||||||
|
or alternatively use the '-s' option to select a different default UI.", selected_ui)
|
||||||
else:
|
else:
|
||||||
log.exception(e)
|
log.exception(e)
|
||||||
log.error("There was an error whilst launching the request UI: %s", selected_ui)
|
log.error("There was an error whilst launching the request UI: %s", selected_ui)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue