commit 23d16154a90de84aa145ad46d492161ff09cfc85
parent e2d00c61cd45db13eef1c13ea5731ae4f84b4436
Author: ThomasV <thomasv@electrum.org>
Date: Mon, 18 Jan 2016 15:20:01 +0100
kivy: improve status dialog
Diffstat:
2 files changed, 48 insertions(+), 250 deletions(-)
diff --git a/gui/kivy/uix/dialogs/carousel_dialog.py b/gui/kivy/uix/dialogs/carousel_dialog.py
@@ -1,242 +0,0 @@
-''' Dialogs intended to be used along with a slidable carousel inside
-and indicators on either top, left, bottom or right side. These indicators can
-be touched to travel to a particular slide.
-'''
-from electrum.i18n import _
-
-
-from kivy.app import App
-from kivy.clock import Clock
-from kivy.properties import NumericProperty, ObjectProperty
-from kivy.factory import Factory
-from kivy.lang import Builder
-
-import weakref
-
-
-class CarouselHeader(Factory.TabbedPanelHeader):
- '''Tabbed Panel Header with a circular image on top to be used as a
- indicator for the current slide.
- '''
-
- slide = NumericProperty(0)
- ''' indicates the link to carousels slide'''
-
-
-class CarouselDialog(Factory.AnimatedPopup):
- ''' A Popup dialog with a CarouselIndicator used as the content.
- '''
-
- carousel_content = ObjectProperty(None)
-
- def add_widget(self, widget, index=0):
- if isinstance(widget, Factory.Carousel):
- super(CarouselDialog, self).add_widget(widget, index)
- return
- if 'carousel_content' not in self.ids.keys():
- super(CarouselDialog, self).add_widget(widget)
- return
- self.carousel_content.add_widget(widget, index)
-
-
-class WalletAddressesDialog(CarouselDialog):
- ''' Show current wallets and their addresses using qrcode widget
- '''
-
- def __init__(self, **kwargs):
- self._loaded = False
- super(WalletAddressesDialog, self).__init__(**kwargs)
-
- def on_activate(self):
- # do activate routine here
- slide = None
-
- if not self._loaded:
- self._loaded = True
- CarouselHeader = Factory.CarouselHeader
- ch = CarouselHeader()
- ch.slide = 0 # idx
- slide = Factory.ScreenAddress()
-
- slide.tab = ch
-
- self.add_widget(slide)
- self.add_widget(ch)
-
- app = App.get_running_app()
- if not slide:
- slide = self.carousel_content.carousel.slides[0]
-
- # add a tab for each wallet
- self.wallet_name = app.wallet.get_account_names()[0]
- labels = app.wallet.labels
-
- addresses = app.wallet.addresses()
- _labels = {}
-
- for address in addresses:
- _labels[labels.get(address, address)] = address
-
- slide.labels = _labels
- Clock.schedule_once(lambda dt: self._setup_slide(slide))
-
- def _setup_slide(self, slide):
- btn_address = slide.ids.btn_address
- btn_address.values = values = slide.labels.keys()
- if not btn_address.text:
- btn_address.text = values[0]
-
-
-class RecentActivityDialog(CarouselDialog):
- '''
- '''
- def on_activate(self):
-
- # animate to first slide
- #carousel = self.carousel_content.carousel
- #carousel.load_slide(carousel.slides[0])
-
- item = self.item
- try:
- self.address = item.address
- except ReferenceError:
- self.dismiss()
- return
-
- self.amount = item.amount[1:]
- self.amount_color = item.amount_color
- self.confirmations = item.confirmations
- self.quote_text = item.quote_text
- date_time = item.date.split()
- if len(date_time) == 2:
- self.date = date_time[0]
- self.time = date_time[1]
- self.status = 'Validated'
- else:
- self.date = item.date
- self.status = 'Pending'
- self.tx_hash = item.tx_hash
-
- app = App.get_running_app()
-
- tx_hash = item.tx_hash
- tx = app.wallet.transactions.get(tx_hash)
- tx.deserialize()
-
- if tx_hash in app.wallet.transactions.keys():
- is_relevant, is_mine, v, fee = app.wallet.get_wallet_delta(tx)
- conf, timestamp = app.wallet.get_confirmations(tx_hash)
- else:
- is_mine = False
-
- self.is_mine = is_mine
-
- if is_mine:
- if fee is not None:
- self.fee = app.format_amount(fee)
- else:
- self.fee = 'unknown'
-
- labels = app.wallet.labels
- addresses = app.wallet.addresses()
- _labels = {}
-
- self.wallet_name = app.wallet.get_account_names()['0']
- for address in addresses:
- _labels[labels.get(address, address)] = address
-
- self.labels = _labels
-
- def open(self):
- self._trans_actv = self._det_actv = self._in_actv\
- = self._out_actv = False
- super(RecentActivityDialog, self).open()
-
- def dismiss(self):
- if self._in_actv:
- self.ids.list_inputs.content = ""
- self.ids.list_inputs.clear_widgets()
- if self._out_actv:
- self.ids.list_outputs.content = ""
- self.ids.list_outputs.clear_widgets()
- super(RecentActivityDialog, self).dismiss()
-
- def dropdown_selected(self, value):
- app = App.get_running_app()
- try:
- labels = self.labels
- except AttributeError:
- return
-
- address = labels.get(self.address, self.address[1:])
-
- if value.startswith(_('Copy')):
- app.copy(address)
- elif value.startswith(_('Send')):
- app.send_payment(address)
- self.dismiss()
-
- def activate_screen_transactionid(self, screen):
- if self._trans_actv:
- return
-
- self._trans_actv = True
- Clock.schedule_once(
- lambda dt: self._activate_screen_transactionid(screen), .1)
-
- def _activate_screen_transactionid(self, screen):
- content = screen.content
- if not content:
- content = Factory.RecentActivityScrTransID()
- screen.content = content
- screen.add_widget(content)
- content.tx_hash = self.tx_hash
- content.text_color = self.text_color
- content.carousel_content = self.carousel_content
-
- def activate_screen_inputs(self, screen):
- if self._in_actv:
- return
-
- self._in_actv = True
- Clock.schedule_once(
- lambda dt: self._activate_screen_inputs(screen), .1)
-
- def _activate_screen_inputs(self, screen):
- content = screen.content
- if not content:
- content = Factory.RecentActivityScrInputs()
- screen.content = content
- screen.add_widget(content)
- self.populate_inputs_outputs(content, 'in')
-
- def activate_screen_outputs(self, screen):
- if self._out_actv:
- return
-
- self._out_actv = True
- Clock.schedule_once(
- lambda dt: self._activate_screen_outputs(screen), .1)
-
- def _activate_screen_outputs(self, screen):
- content = screen.content
- if not content:
- content = Factory.RecentActivityScrOutputs()
- screen.content = content
- screen.add_widget(content)
- self.populate_inputs_outputs(content, 'out')
-
- def populate_inputs_outputs(self, content, mode):
- app = App.get_running_app()
- tx_hash = self.tx_hash
- if tx_hash:
- tx = app.wallet.transactions.get(tx_hash)
- tx.deserialize()
- if mode == 'out':
- content.data = \
- [(address, app.format_amount(value))\
- for _type, address, value in tx.outputs]
- else:
- content.data = \
- [(input['address'], input['prevout_hash'])\
- for input in tx.inputs]
diff --git a/gui/kivy/uix/ui_screens/status.kv b/gui/kivy/uix/ui_screens/status.kv
@@ -1,31 +1,71 @@
#:import os os
Popup:
- title: "Balance"
+ title: "Electrum"
confirmed: 0
unconfirmed: 0
unmatured: 0
on_parent:
- self.confirmed, self.unconfirmed, self.x = app.wallet.get_balance()
+ self.confirmed, self.unconfirmed, self.unmatured = app.wallet.get_balance()
BoxLayout:
orientation: 'vertical'
spacing: '1dp'
GridLayout:
cols:2
Label:
- text: _("Wallet:")
+ text: _("Wallet Name:")
+ text_size: self.size
+ halign: 'left'
Label:
text: os.path.basename(app.wallet.storage.path)
+ text_size: self.size
+ halign: 'left'
+ Label:
+ text: _("Wallet type:")
+ text_size: self.size
+ halign: 'left'
+ Label:
+ text: app.wallet.wallet_type
+ text_size: self.size
+ halign: 'left'
+ Label:
+ text: _("Balance") + ':'
+ text_size: self.size
+ halign: 'left'
+ Label:
+ text: app.format_amount_and_units(root.confirmed + root.unconfirmed + root.unmatured)
+ text_size: self.size
+ halign: 'left'
+
+ Label:
+ text: _("Confirmed") + ':'
+ opacity: 1 if root.confirmed else 0
+ text_size: self.size
+ halign: 'left'
Label:
- text: _("Confirmed:")
- Label:
text: app.format_amount_and_units(root.confirmed)
+ opacity: 1 if root.confirmed else 0
+ text_size: self.size
+ halign: 'left'
Label:
- text: _("Unconfirmed:")
+ text: _("Unconfirmed") + ':'
+ text_size: self.size
+ halign: 'left'
+ opacity: 1 if root.unconfirmed else 0
Label:
text: app.format_amount_and_units(root.unconfirmed)
+ opacity: 1 if root.unconfirmed else 0
+ text_size: self.size
+ halign: 'left'
Label:
- text: "Unmatured:"
+ text: _("Unmatured") + ':'
+ text_size: self.size
+ halign: 'left'
+ opacity: 1 if root.unmatured else 0
Label:
text: app.format_amount_and_units(root.unmatured)
- Widget
+ opacity: 1 if root.unmatured else 0
+ text_size: self.size
+ halign: 'left'
+ Widget:
+ size_hint: None, 1