From 1b0e29d385ccd62dbb55a47e768a32e5f0125358 Mon Sep 17 00:00:00 2001 From: ThomasV Date: Thu, 10 Dec 2015 11:33:58 +0100 Subject: [PATCH] kivy: add screens for invoices and requests, disable contacts --- gui/kivy/main.kv | 24 ++++++++++--- gui/kivy/main_window.py | 2 ++ gui/kivy/uix/screens.py | 42 ++++++++++++++++++++++- gui/kivy/uix/ui_screens/invoices.kv | 50 +++++++++++++++++++++++++++ gui/kivy/uix/ui_screens/requests.kv | 53 +++++++++++++++++++++++++++++ 5 files changed, 165 insertions(+), 6 deletions(-) create mode 100644 gui/kivy/uix/ui_screens/invoices.kv create mode 100644 gui/kivy/uix/ui_screens/requests.kv diff --git a/gui/kivy/main.kv b/gui/kivy/main.kv index ea9d25210..dd8fccb20 100644 --- a/gui/kivy/main.kv +++ b/gui/kivy/main.kv @@ -292,9 +292,15 @@ ReceiveScreen: id: receive_screen tab: receive_tab - ContactsScreen: - id: contacts_screen - tab: contacts_tab + InvoicesScreen: + id: invoices_screen + tab: invoices_tab + RequestsScreen: + id: requests_screen + tab: requests_tab + #ContactsScreen: + # id: contacts_screen + # tab: contacts_tab CleanHeader: id: history_tab text: _('History') @@ -308,9 +314,17 @@ text: _('Receive') slide: 2 CleanHeader: - id: contacts_tab - text: _('Contacts') + id: invoices_tab + text: _('Invoices') slide: 3 + CleanHeader: + id: requests_tab + text: _('Requests') + slide: 4 + #CleanHeader: + # id: contacts_tab + # text: _('Contacts') + # slide: 4 on_release: diff --git a/gui/kivy/main_window.py b/gui/kivy/main_window.py index 93b36a82d..a13218812 100644 --- a/gui/kivy/main_window.py +++ b/gui/kivy/main_window.py @@ -9,6 +9,7 @@ import electrum from electrum import WalletStorage, Wallet from electrum.i18n import _, set_language from electrum.contacts import Contacts +from electrum.paymentrequest import InvoiceStore from electrum.util import profiler, InvalidPassword from electrum.plugins import run_hook from electrum.util import format_satoshis, format_satoshis_plain @@ -176,6 +177,7 @@ class ElectrumWindow(App): #self.config = self.gui_object.config self.contacts = Contacts(self.electrum_config) + self.invoices = InvoiceStore(self.electrum_config) self.bind(url=self.set_URI) # were we sent a url? diff --git a/gui/kivy/uix/screens.py b/gui/kivy/uix/screens.py index d806fca7b..33a0712ff 100644 --- a/gui/kivy/uix/screens.py +++ b/gui/kivy/uix/screens.py @@ -17,7 +17,7 @@ from kivy.lang import Builder from kivy.factory import Factory 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.util import timestamp_to_datetime from electrum.plugins import run_hook @@ -311,6 +311,46 @@ class ContactsScreen(CScreen): 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): '''CustomDropDown that allows fading out the dropdown diff --git a/gui/kivy/uix/ui_screens/invoices.kv b/gui/kivy/uix/ui_screens/invoices.kv new file mode 100644 index 000000000..3a0151c7f --- /dev/null +++ b/gui/kivy/uix/ui_screens/invoices.kv @@ -0,0 +1,50 @@ + + #color: .305, .309, .309, 1 + text_size: self.size + halign: 'left' + valign: 'middle' + + + 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' diff --git a/gui/kivy/uix/ui_screens/requests.kv b/gui/kivy/uix/ui_screens/requests.kv new file mode 100644 index 000000000..96aebed31 --- /dev/null +++ b/gui/kivy/uix/ui_screens/requests.kv @@ -0,0 +1,53 @@ + + #color: .305, .309, .309, 1 + text_size: self.size + halign: 'left' + valign: 'middle' + + + 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'