kivy: add screens for invoices and requests, disable contacts
This commit is contained in:
@@ -292,9 +292,15 @@
|
|||||||
ReceiveScreen:
|
ReceiveScreen:
|
||||||
id: receive_screen
|
id: receive_screen
|
||||||
tab: receive_tab
|
tab: receive_tab
|
||||||
ContactsScreen:
|
InvoicesScreen:
|
||||||
id: contacts_screen
|
id: invoices_screen
|
||||||
tab: contacts_tab
|
tab: invoices_tab
|
||||||
|
RequestsScreen:
|
||||||
|
id: requests_screen
|
||||||
|
tab: requests_tab
|
||||||
|
#ContactsScreen:
|
||||||
|
# id: contacts_screen
|
||||||
|
# tab: contacts_tab
|
||||||
CleanHeader:
|
CleanHeader:
|
||||||
id: history_tab
|
id: history_tab
|
||||||
text: _('History')
|
text: _('History')
|
||||||
@@ -308,9 +314,17 @@
|
|||||||
text: _('Receive')
|
text: _('Receive')
|
||||||
slide: 2
|
slide: 2
|
||||||
CleanHeader:
|
CleanHeader:
|
||||||
id: contacts_tab
|
id: invoices_tab
|
||||||
text: _('Contacts')
|
text: _('Invoices')
|
||||||
slide: 3
|
slide: 3
|
||||||
|
CleanHeader:
|
||||||
|
id: requests_tab
|
||||||
|
text: _('Requests')
|
||||||
|
slide: 4
|
||||||
|
#CleanHeader:
|
||||||
|
# id: contacts_tab
|
||||||
|
# text: _('Contacts')
|
||||||
|
# slide: 4
|
||||||
|
|
||||||
<ActionOvrButton@ActionButton>
|
<ActionOvrButton@ActionButton>
|
||||||
on_release:
|
on_release:
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import electrum
|
|||||||
from electrum import WalletStorage, Wallet
|
from electrum import WalletStorage, Wallet
|
||||||
from electrum.i18n import _, set_language
|
from electrum.i18n import _, set_language
|
||||||
from electrum.contacts import Contacts
|
from electrum.contacts import Contacts
|
||||||
|
from electrum.paymentrequest import InvoiceStore
|
||||||
from electrum.util import profiler, InvalidPassword
|
from electrum.util import profiler, InvalidPassword
|
||||||
from electrum.plugins import run_hook
|
from electrum.plugins import run_hook
|
||||||
from electrum.util import format_satoshis, format_satoshis_plain
|
from electrum.util import format_satoshis, format_satoshis_plain
|
||||||
@@ -176,6 +177,7 @@ class ElectrumWindow(App):
|
|||||||
|
|
||||||
#self.config = self.gui_object.config
|
#self.config = self.gui_object.config
|
||||||
self.contacts = Contacts(self.electrum_config)
|
self.contacts = Contacts(self.electrum_config)
|
||||||
|
self.invoices = InvoiceStore(self.electrum_config)
|
||||||
|
|
||||||
self.bind(url=self.set_URI)
|
self.bind(url=self.set_URI)
|
||||||
# were we sent a url?
|
# were we sent a url?
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ from kivy.lang import Builder
|
|||||||
from kivy.factory import Factory
|
from kivy.factory import Factory
|
||||||
|
|
||||||
from electrum.i18n import _
|
from electrum.i18n import _
|
||||||
from electrum.util import profiler, parse_URI
|
from electrum.util import profiler, parse_URI, format_time
|
||||||
from electrum import bitcoin
|
from electrum import bitcoin
|
||||||
from electrum.util import timestamp_to_datetime
|
from electrum.util import timestamp_to_datetime
|
||||||
from electrum.plugins import run_hook
|
from electrum.plugins import run_hook
|
||||||
@@ -311,6 +311,46 @@ class ContactsScreen(CScreen):
|
|||||||
contact_list.add_widget(ci)
|
contact_list.add_widget(ci)
|
||||||
|
|
||||||
|
|
||||||
|
class InvoicesScreen(CScreen):
|
||||||
|
kvname = 'invoices'
|
||||||
|
|
||||||
|
def update(self):
|
||||||
|
invoices_list = self.screen.ids.invoices_container
|
||||||
|
invoices_list.clear_widgets()
|
||||||
|
for pr in self.app.invoices.sorted_list():
|
||||||
|
ci = Factory.InvoiceItem()
|
||||||
|
ci.key = pr.get_id()
|
||||||
|
ci.requestor = pr.get_requestor()
|
||||||
|
ci.memo = pr.memo
|
||||||
|
ci.amount = self.app.format_amount(pr.get_amount())
|
||||||
|
#ci.status = self.invoices.get_status(key)
|
||||||
|
exp = pr.get_expiration_date()
|
||||||
|
ci.date = format_time(exp) if exp else _('Never')
|
||||||
|
invoices_list.add_widget(ci)
|
||||||
|
|
||||||
|
class RequestsScreen(CScreen):
|
||||||
|
kvname = 'requests'
|
||||||
|
|
||||||
|
def update(self):
|
||||||
|
requests_list = self.screen.ids.requests_container
|
||||||
|
requests_list.clear_widgets()
|
||||||
|
for req in self.app.wallet.get_sorted_requests(self.app.electrum_config):
|
||||||
|
address = req['address']
|
||||||
|
timestamp = req.get('time', 0)
|
||||||
|
amount = req.get('amount')
|
||||||
|
expiration = req.get('exp', None)
|
||||||
|
status = req.get('status')
|
||||||
|
signature = req.get('sig')
|
||||||
|
|
||||||
|
ci = Factory.RequestItem()
|
||||||
|
ci.address = req['address']
|
||||||
|
ci.memo = req.get('memo', '')
|
||||||
|
#ci.status = req.get('status')
|
||||||
|
ci.amount = self.app.format_amount(amount) if amount else ''
|
||||||
|
ci.date = format_time(timestamp)
|
||||||
|
requests_list.add_widget(ci)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class CSpinner(Factory.Spinner):
|
class CSpinner(Factory.Spinner):
|
||||||
'''CustomDropDown that allows fading out the dropdown
|
'''CustomDropDown that allows fading out the dropdown
|
||||||
|
|||||||
50
gui/kivy/uix/ui_screens/invoices.kv
Normal file
50
gui/kivy/uix/ui_screens/invoices.kv
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
<InvoicesLabel@Label>
|
||||||
|
#color: .305, .309, .309, 1
|
||||||
|
text_size: self.size
|
||||||
|
halign: 'left'
|
||||||
|
valign: 'middle'
|
||||||
|
|
||||||
|
<InvoiceItem@BoxLayout>
|
||||||
|
requestor: ''
|
||||||
|
memo: ''
|
||||||
|
amount: ''
|
||||||
|
status: ''
|
||||||
|
date: ''
|
||||||
|
size_hint_y: None
|
||||||
|
height: '65dp'
|
||||||
|
padding: dp(12)
|
||||||
|
spacing: dp(5)
|
||||||
|
canvas.before:
|
||||||
|
Color:
|
||||||
|
rgba: 0.3, 0.3, 0.3, 1
|
||||||
|
Rectangle:
|
||||||
|
size: self.size
|
||||||
|
pos: self.pos
|
||||||
|
InvoicesLabel:
|
||||||
|
text: root.requestor
|
||||||
|
InvoicesLabel:
|
||||||
|
text: root.memo
|
||||||
|
InvoicesLabel:
|
||||||
|
text: root.amount
|
||||||
|
|
||||||
|
InvoicesScreen:
|
||||||
|
name: 'invoices'
|
||||||
|
on_activate:
|
||||||
|
if not self.action_view:\
|
||||||
|
self.action_view = app.root.main_screen.ids.tabs.ids.screen_dashboard.action_view
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'vertical'
|
||||||
|
spacing: '1dp'
|
||||||
|
ScrollView:
|
||||||
|
canvas.before:
|
||||||
|
Color:
|
||||||
|
rgba: .8901, .8901, .8901, 0
|
||||||
|
Rectangle:
|
||||||
|
size: self.size
|
||||||
|
pos: self.pos
|
||||||
|
GridLayout:
|
||||||
|
cols: 1
|
||||||
|
id: invoices_container
|
||||||
|
size_hint_y: None
|
||||||
|
height: self.minimum_height
|
||||||
|
spacing: '1dp'
|
||||||
53
gui/kivy/uix/ui_screens/requests.kv
Normal file
53
gui/kivy/uix/ui_screens/requests.kv
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
<InvoicesLabel@Label>
|
||||||
|
#color: .305, .309, .309, 1
|
||||||
|
text_size: self.size
|
||||||
|
halign: 'left'
|
||||||
|
valign: 'middle'
|
||||||
|
|
||||||
|
<RequestItem@BoxLayout>
|
||||||
|
address: ''
|
||||||
|
memo: ''
|
||||||
|
amount: ''
|
||||||
|
status: ''
|
||||||
|
date: ''
|
||||||
|
size_hint_y: None
|
||||||
|
height: '65dp'
|
||||||
|
padding: dp(12)
|
||||||
|
spacing: dp(5)
|
||||||
|
canvas.before:
|
||||||
|
Color:
|
||||||
|
rgba: 0.3, 0.3, 0.3, 1
|
||||||
|
Rectangle:
|
||||||
|
size: self.size
|
||||||
|
pos: self.pos
|
||||||
|
InvoicesLabel:
|
||||||
|
text: root.address
|
||||||
|
font_size: '13dp'
|
||||||
|
InvoicesLabel:
|
||||||
|
text: root.memo
|
||||||
|
InvoicesLabel:
|
||||||
|
text: root.amount
|
||||||
|
#InvoicesLabel:
|
||||||
|
# text: root.status
|
||||||
|
|
||||||
|
RequestsScreen:
|
||||||
|
name: 'requests'
|
||||||
|
on_activate:
|
||||||
|
if not self.action_view:\
|
||||||
|
self.action_view = app.root.main_screen.ids.tabs.ids.screen_dashboard.action_view
|
||||||
|
BoxLayout:
|
||||||
|
orientation: 'vertical'
|
||||||
|
spacing: '1dp'
|
||||||
|
ScrollView:
|
||||||
|
canvas.before:
|
||||||
|
Color:
|
||||||
|
rgba: .8901, .8901, .8901, 0
|
||||||
|
Rectangle:
|
||||||
|
size: self.size
|
||||||
|
pos: self.pos
|
||||||
|
GridLayout:
|
||||||
|
cols: 1
|
||||||
|
id: requests_container
|
||||||
|
size_hint_y: None
|
||||||
|
height: self.minimum_height
|
||||||
|
spacing: '1dp'
|
||||||
Reference in New Issue
Block a user