electrum-bitcoinprivate/gui/kivy/uix/dialogs/settings.py

207 lines
7.3 KiB
Python
Raw Normal View History

2015-12-16 02:53:37 -08:00
from kivy.app import App
from kivy.factory import Factory
from kivy.properties import ObjectProperty
from kivy.lang import Builder
from electrum.i18n import _
from electrum.util import base_units
from electrum.i18n import languages, set_language
2016-01-19 03:37:40 -08:00
from electrum.plugins import run_hook
2016-01-22 01:50:24 -08:00
from electrum.bitcoin import RECOMMENDED_FEE
2015-12-16 02:53:37 -08:00
Builder.load_string('''
2015-12-18 01:53:50 -08:00
<SettingsItem@ButtonBehavior+BoxLayout>
orientation: 'vertical'
title: ''
description: ''
2016-01-21 03:12:55 -08:00
size_hint: 1, None
2015-12-18 01:53:50 -08:00
Label:
id: title
text: self.parent.title
bold: True
halign: 'left'
size_hint: 1, 1
text_size: self.width, None
2016-01-19 03:37:40 -08:00
Label:
text: self.parent.description
2015-12-18 01:53:50 -08:00
color: 0.8, 0.8, 0.8, 1
2016-01-19 03:37:40 -08:00
size_hint: 1, 1
2015-12-18 01:53:50 -08:00
halign: 'left'
2016-01-19 03:37:40 -08:00
text_size: self.width, None
2016-01-21 03:12:55 -08:00
CardSeparator
2015-12-18 01:53:50 -08:00
2015-12-16 02:53:37 -08:00
<SettingsDialog@Popup>
id: settings
2016-01-19 03:57:18 -08:00
title: _('Electrum Settings')
2015-12-16 02:53:37 -08:00
BoxLayout:
orientation: 'vertical'
2016-01-21 03:12:55 -08:00
ScrollView:
size_hint: 1, 0.8
GridLayout:
row_default_height: '68dp'
cols:1
id: scrollviewlayout
size_hint: 1, None
SettingsItem:
lang: settings.get_language_name()
title: _('Language') + ': %s'%self.lang
description: _("Language")
on_release:
settings.language_dialog(self)
height: '48dp'
SettingsItem:
status: 'ON' if app.wallet.use_encryption else 'OFF'
title: _('PIN code') + ': ' + self.status
description: _("Change your PIN code.")
on_release:
app.change_password()
self.status = 'ON' if app.wallet.use_encryption else 'OFF'
SettingsItem:
bu: app.base_unit
title: _('Denomination') + ': ' + self.bu
description: _("Base unit for Bitcoin amounts.")
on_release:
settings.unit_dialog(self)
2016-01-22 01:50:24 -08:00
SettingsItem:
status: root.fee_status()
title: _('Fees') + ': ' + self.status
description: _("Fees paid to the Bitcoin miners.")
on_release:
root.fee_dialog(self)
2016-01-21 03:12:55 -08:00
SettingsItem:
status: 'ON' if bool(app.plugins.get('exchange_rate')) else 'OFF'
2016-01-22 01:50:24 -08:00
title: _('Exchange rates') + ': ' + self.status
2016-01-21 03:12:55 -08:00
description: _("Display amounts in fiat currency.")
on_release:
settings.plugin_dialog('exchange_rate', self)
SettingsItem:
status: app.fiat_unit
title: _('Fiat Currency') + ': ' + self.status
description: _("Select the local fiat currency.")
on_release:
settings.fiat_currency_dialog(self)
SettingsItem:
status: root.fiat_source()
title: _('Fiat source') + ': ' + self.status
description: _("Source for fiat currency exchange rate.")
on_release:
settings.fiat_source_dialog(self)
SettingsItem:
status: 'ON' if bool(app.plugins.get('labels')) else 'OFF'
title: _('Labels Sync') + ': ' + self.status
description: "Synchronize labels."
on_release:
settings.plugin_dialog('labels', self)
SettingsItem:
title: _('OpenAlias')
description: "DNS record that stores one of your Bitcoin addresses."
on_release:
settings.openalias_dialog()
2015-12-16 02:53:37 -08:00
BoxLayout:
2016-01-21 03:12:55 -08:00
size_hint: 1, 0.1
2015-12-16 02:53:37 -08:00
Widget:
size_hint: 0.5, None
Button:
size_hint: 0.5, None
height: '48dp'
text: _('OK')
on_release:
settings.dismiss()
''')
class SettingsDialog(Factory.Popup):
def __init__(self, app):
self.app = app
2016-01-19 03:37:40 -08:00
self.plugins = self.app.plugins
self.config = self.app.electrum_config
2015-12-16 02:53:37 -08:00
Factory.Popup.__init__(self)
2016-01-21 03:12:55 -08:00
layout = self.ids.scrollviewlayout
layout.bind(minimum_height=layout.setter('height'))
2015-12-16 02:53:37 -08:00
def get_language_name(self):
2016-01-19 03:37:40 -08:00
return languages.get(self.config.get('language', 'en_UK'), '')
2015-12-16 02:53:37 -08:00
def language_dialog(self, item):
from choice_dialog import ChoiceDialog
2016-01-19 03:37:40 -08:00
l = self.config.get('language', 'en_UK')
2015-12-16 02:53:37 -08:00
def cb(key):
2016-01-19 03:37:40 -08:00
self.config.set_key("language", key, True)
2015-12-16 02:53:37 -08:00
item.lang = self.get_language_name()
2015-12-18 01:53:50 -08:00
set_language(key)
2015-12-16 02:53:37 -08:00
d = ChoiceDialog(_('Language'), languages, l, cb)
d.open()
def unit_dialog(self, item):
from choice_dialog import ChoiceDialog
def cb(text):
self.app._set_bu(text)
item.bu = self.app.base_unit
2016-01-21 07:29:46 -08:00
d = ChoiceDialog(_('Denomination'), base_units.keys(), self.app.base_unit, cb)
2015-12-16 02:53:37 -08:00
d.open()
2016-01-21 03:12:55 -08:00
def fiat_currency_dialog(self, item):
2015-12-16 02:53:37 -08:00
from choice_dialog import ChoiceDialog
2016-01-21 03:12:55 -08:00
p = self.app.plugins.get('exchange_rate')
if not p:
return
2015-12-16 02:53:37 -08:00
def cb(text):
2016-01-21 07:29:46 -08:00
p.set_currency(text)
2016-01-21 03:12:55 -08:00
item.status = text
2016-01-21 07:29:46 -08:00
self.app.fiat_unit = text
2016-01-21 03:12:55 -08:00
l = sorted(p.exchange.quotes.keys()) if p else []
2016-01-21 07:29:46 -08:00
d = ChoiceDialog(_('Fiat Currency'), l, p.get_currency(), cb)
2016-01-21 03:12:55 -08:00
d.open()
def fiat_source(self):
p = self.app.plugins.get('exchange_rate')
return p.exchange.name() if p else 'None'
2016-01-19 03:37:40 -08:00
2016-01-21 03:12:55 -08:00
def fiat_source_dialog(self, item):
from choice_dialog import ChoiceDialog
p = self.plugins.get('exchange_rate')
if not p:
return
def cb(text):
p.set_exchange(text)
item.status = text
l = sorted(p.exchanges.keys())
d = ChoiceDialog(_('Exchange rate source'), l, self.fiat_source(), cb)
2015-12-16 02:53:37 -08:00
d.open()
def openalias_dialog(self):
from label_dialog import LabelDialog
def callback(text):
pass
d = LabelDialog(_('OpenAlias'), '', callback)
d.open()
2015-12-18 01:53:50 -08:00
2016-01-21 03:12:55 -08:00
def plugin_dialog(self, name, label):
2016-01-19 03:37:40 -08:00
from checkbox_dialog import CheckBoxDialog
def callback(status):
2016-01-21 03:12:55 -08:00
self.plugins.enable(name) if status else self.plugins.disable(name)
2016-01-19 03:37:40 -08:00
label.status = 'ON' if status else 'OFF'
2016-01-22 01:50:24 -08:00
2016-01-21 03:12:55 -08:00
status = bool(self.plugins.get(name))
dd = self.plugins.descriptions.get(name)
descr = dd.get('description')
fullname = dd.get('fullname')
d = CheckBoxDialog(fullname, descr, status, callback)
2016-01-19 03:37:40 -08:00
d.open()
2016-01-22 01:50:24 -08:00
def fee_status(self):
if self.config.get('dynamic_fees'):
f = self.config.get('fee_factor', 50) + 50
return 'Dynamic, %d%%'%f
else:
F = self.config.get('fee_per_kb', RECOMMENDED_FEE)
return self.app.format_amount(F) + ' ' + self.app.base_unit + '/kB'
def fee_dialog(self, label):
from fee_dialog import FeeDialog
def cb():
label.status = self.fee_status()
d = FeeDialog(self.config, cb)
d.open()