commit 5e5f3202b10a65061b433c6bde55da5ee941c497
parent c55a253f6d8b659bacaac90ab4ea4ccb9fe7ab15
Author: ThomasV <thomasv@electrum.org>
Date: Mon, 14 Dec 2015 14:27:39 +0100
kivy: move amount dialog
Diffstat:
4 files changed, 121 insertions(+), 1888 deletions(-)
diff --git a/gui/kivy/main_window.py b/gui/kivy/main_window.py
@@ -733,26 +733,17 @@ class ElectrumWindow(App):
def amount_dialog(self, screen, show_max):
- popup = Builder.load_file('gui/kivy/uix/ui_screens/amount.kv')
- but_max = popup.ids.but_max
- if not show_max:
- but_max.disabled = True
- but_max.opacity = 0
- else:
- but_max.disabled = False
- but_max.opacity = 1
-
+ from uix.dialogs.amount_dialog import AmountDialog
amount = screen.amount
if amount:
- a, u = str(amount).split()
+ amount, u = str(amount).split()
assert u == self.base_unit
- popup.ids.kb.amount = a
-
- def cb():
- o = popup.ids.a.btc_text
- screen.amount = o
+ else:
+ amount = None
- popup.on_dismiss = cb
+ def cb(amount):
+ screen.amount = amount
+ popup = AmountDialog(show_max, amount, cb)
popup.open()
def protected(self, f, args):
diff --git a/gui/kivy/uix/dialogs/amount_dialog.py b/gui/kivy/uix/dialogs/amount_dialog.py
@@ -0,0 +1,114 @@
+from kivy.app import App
+from kivy.factory import Factory
+from kivy.properties import ObjectProperty
+from kivy.lang import Builder
+
+
+Builder.load_string('''
+<AmountDialog@Popup>
+ id: popup
+ title: _('Amount')
+ AnchorLayout:
+ anchor_x: 'center'
+ BoxLayout:
+ orientation: 'vertical'
+ size_hint: 0.8, 1
+ BoxLayout:
+ size_hint: 1, 1
+ height: '48dp'
+ Label:
+ id: a
+ btc_text: (kb.amount + ' ' + app.base_unit) if kb.amount else ''
+ fiat_text: (kb.fiat_amount + ' ' + app.fiat_unit) if kb.fiat_amount else ''
+ text: ((self.fiat_text + ' / ' + self.btc_text if kb.is_fiat else self.btc_text + ' / ' + self.fiat_text) if app.fiat_unit else self.btc_text) if self.btc_text else ''
+ size_hint: 1, 1
+ font_size: '22dp'
+ Widget:
+ size_hint: 1, 1
+ GridLayout:
+ id: kb
+ amount: ''
+ fiat_amount: ''
+ is_fiat: False
+ on_fiat_amount: if self.is_fiat: self.amount = app.fiat_to_btc(self.fiat_amount)
+ on_amount: if not self.is_fiat: self.fiat_amount = app.btc_to_fiat(self.amount)
+ update_text: app.update_amount
+ size_hint: 1, None
+ height: '300dp'
+ cols: 3
+ KButton:
+ text: '1'
+ KButton:
+ text: '2'
+ KButton:
+ text: '3'
+ KButton:
+ text: '4'
+ KButton:
+ text: '5'
+ KButton:
+ text: '6'
+ KButton:
+ text: '7'
+ KButton:
+ text: '8'
+ KButton:
+ text: '9'
+ KButton:
+ text: '.'
+ KButton:
+ text: '0'
+ KButton:
+ text: '<'
+ Button:
+ id: but_max
+ opacity: 1 if root.show_max else 0
+ disabled: not root.show_max
+ size_hint: 1, None
+ height: '48dp'
+ text: 'Max'
+ on_release:
+ kb.is_fiat = False
+ kb.amount = app.get_max_amount()
+ Button:
+ id: button_fiat
+ size_hint: 1, None
+ height: '48dp'
+ text: (app.fiat_unit if kb.is_fiat else app.base_unit) if app.fiat_unit else ''
+ on_release:
+ app.toggle_fiat(kb)
+ Button:
+ size_hint: 1, None
+ height: '48dp'
+ text: 'Clear'
+ on_release:
+ kb.amount = ''
+ kb.fiat_amount = ''
+ Widget:
+ size_hint: 1, None
+ BoxLayout:
+ size_hint: 1, None
+ height: '48dp'
+ Widget:
+ size_hint: 2, None
+ height: '48dp'
+ Button:
+ size_hint: 1, None
+ height: '48dp'
+ text: _('OK')
+ on_release:
+ root.callback(a.btc_text)
+ popup.dismiss()
+''')
+
+from kivy.properties import BooleanProperty
+
+class AmountDialog(Factory.Popup):
+ show_max = BooleanProperty(False)
+ def __init__(self, show_max, amount, cb):
+ Factory.Popup.__init__(self)
+ self.show_max = show_max
+ self.callback = cb
+ if amount:
+ self.ids.kb.amount = amount
+
diff --git a/gui/kivy/uix/ui_screens/amount.kv b/gui/kivy/uix/ui_screens/amount.kv
@@ -1,97 +0,0 @@
-#:import Decimal decimal.Decimal
-
-
-Popup:
- id: popup
- title: _('Amount')
-
- AnchorLayout:
- anchor_x: 'center'
-
- BoxLayout:
- orientation: 'vertical'
- size_hint: 0.8, 1
- BoxLayout:
- size_hint: 1, 1
- height: '48dp'
- Label:
- id: a
- btc_text: (kb.amount + ' ' + app.base_unit) if kb.amount else ''
- fiat_text: (kb.fiat_amount + ' ' + app.fiat_unit) if kb.fiat_amount else ''
- text: ((self.fiat_text + ' / ' + self.btc_text if kb.is_fiat else self.btc_text + ' / ' + self.fiat_text) if app.fiat_unit else self.btc_text) if self.btc_text else ''
- size_hint: 1, 1
- font_size: '22dp'
- Widget:
- size_hint: 1, 1
- GridLayout:
- id: kb
- amount: ''
- fiat_amount: ''
- is_fiat: False
- on_fiat_amount: if self.is_fiat: self.amount = app.fiat_to_btc(self.fiat_amount)
- on_amount: if not self.is_fiat: self.fiat_amount = app.btc_to_fiat(self.amount)
- update_text: app.update_amount
- size_hint: 1, None
- height: '300dp'
- cols: 3
- KButton:
- text: '1'
- KButton:
- text: '2'
- KButton:
- text: '3'
- KButton:
- text: '4'
- KButton:
- text: '5'
- KButton:
- text: '6'
- KButton:
- text: '7'
- KButton:
- text: '8'
- KButton:
- text: '9'
- KButton:
- text: '.'
- KButton:
- text: '0'
- KButton:
- text: '<'
- Button:
- id: but_max
- size_hint: 1, None
- height: '48dp'
- text: 'Max'
- on_release:
- kb.is_fiat = False
- kb.amount = app.get_max_amount()
- Button:
- id: button_fiat
- size_hint: 1, None
- height: '48dp'
- text: (app.fiat_unit if kb.is_fiat else app.base_unit) if app.fiat_unit else ''
- on_release:
- app.toggle_fiat(kb)
- Button:
- size_hint: 1, None
- height: '48dp'
- text: 'Clear'
- on_release:
- kb.amount = ''
- kb.fiat_amount = ''
-
- Widget:
- size_hint: 1, None
-
- BoxLayout:
- size_hint: 1, None
- height: '48dp'
- Widget:
- size_hint: 2, None
- height: '48dp'
- Button:
- size_hint: 1, None
- height: '48dp'
- text: _('OK')
- on_release: popup.dismiss()
diff --git a/gui/kivy/uix/ui_screens/mainscreen.kv b/gui/kivy/uix/ui_screens/mainscreen.kv
@@ -1,1774 +0,0 @@
-#:import _ electrum.i18n._
-#:import Cache kivy.cache.Cache
-#:import Factory kivy.factory.Factory
-#:import Decimal decimal.Decimal
-#:set font_light 'data/fonts/Roboto-Condensed.ttf'
-#:set btc_symbol unichr(171)
-#:set mbtc_symbol unichr(187)
-
-<WalletActionPrevious@ActionPrevious>
- app_icon: 'atlas://gui/kivy/theming/light/' + ('wallets' if app.ui_mode[0] != 't' else 'tab_btn')
- with_previous: False
- size_hint: None, 1
- mipmap: True
- on_release: app.root.children[0].toggle_drawer()
-
-<CloseButton@IconButton>
- source: 'atlas://gui/kivy/theming/light/closebutton'
- opacity: 1 if self.state == 'normal' else .75
- size_hint: None, None
- size: '27dp', '27dp'
-
-#######################
-# Screen Contacts
-#######################
-<ContactImage@Widget>:
- source: 'atlas://gui/kivy/theming/light/contact_avatar'
- size_hint_x: None
- width: self.height
- canvas:
- Color:
- rgba: 1, 1, 1, 1
- Ellipse:
- source: root.source
- size: self.width + dp(6), self.height + dp(6)
- pos: self.x - dp(3), self.y - dp(3)
- Ellipse:
- source: 'atlas://gui/kivy/theming/light/contact_overlay'
- size: self.width + dp(11), self.height + dp(11)
- pos: self.x - dp(5.5), self.y - dp(5.5)
-
-<ContactLabel@Label>
- color: .305, .309, .309, 1
- text_size: self.size
- halign: 'left'
- valign: 'middle'
-
-<ContactSeperator@Widget>
- canvas.before:
- Color:
- rgba: .890, .890, .890, 1
- Rectangle:
- size: self.size
- pos: self.x, self.y + dp(9)
- size_hint: None, None
- size: '1dp', '22dp'
- pos_hint_y: .5
-
-<ContactTextInput@TextInput>
- background_normal: self.background_down
- background_down: 'atlas://gui/kivy/theming/light/tab_btn'
- size_hint_y: None
- height: '22dp'
-
-<ContactBitLogo@Image>
- source: 'atlas://gui/kivy/theming/light/bit_logo'
- size_hint_x: None
- width: '32dp'
-
-<ContactItem@BoxLayout>
- address: ''
- label: ''
- tx_amt: 0
- size_hint_y: None
- height: '65dp'
- padding: dp(12)
- spacing: dp(5)
- canvas.before:
- Color:
- rgba: 1, 1, 1, 1
- Rectangle:
- size: self.size
- pos: self.pos
- ContactImage:
- id: contact_image
- Widget:
- size_hint_x: None
- width: '9dp'
- ContactLabel:
- id: contact_label
- text: root.label
- ContactSeperator:
- ContactBitLogo:
-
-<ScreenContacts>
- name: 'contacts'
- 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'
- ContactTextInput:
- ScrollView:
- canvas.before:
- Color:
- rgba: .8901, .8901, .8901, 1
- Rectangle:
- size: self.size
- pos: self.pos
- GridLayout:
- cols: 1
- id: contact_container
- size_hint_y: None
- height: self.minimum_height
- spacing: '1dp'
-
-<SendActionView@ActionView>
- foreground_color: (.466, .466, .466, 1)
- color_active: (0.235, .588, .89, 1)
- WalletActionPrevious:
- id: action_previous
- width: but_star.width
- ActionButton:
- id: action_logo
- important: True
- size_hint: 1, 1
- markup: True
- mipmap: True
- bold: True
- markup: True
- color: 1, 1, 1, 1
- text:
- "[color=#777777][sub] [sup][size=9dp]{}[/size][/sup][/sub]{}[/color]"\
- .format(app.base_unit, app.status)
- font_size: '22dp'
- minimum_width: '1dp'
- Butt_star:
- id: but_star
- on_release:
- if self.state == 'down':\
- app.show_info_bubble(\
- text='[b]Expert mode on[/b]\n you can now select your address',\
- icon='atlas://gui/kivy/theming/light/star_big_inactive',\
- duration=1, arrow_pos='', width='250dp')
-
-
-<TextInputSendBlue@TextInput>
- padding: '5dp'
- size_hint: 1, None
- height: '27dp'
- pos_hint: {'center_y':.5}
- multiline: False
- hint_text_color: self.foreground_color
- foreground_color: .843, .914, .972, 1
- background_color: 1, 1, 1, 1
- background_normal: 'atlas://gui/kivy/theming/light/tab_btn'
- background_active: 'atlas://gui/kivy/theming/light/textinput_active'
-
-
-<TransactionFeeDialog@SelectionDialog>
- return_obj: None
- min_fee: app.format_amount(app.wallet.fee)
- title:
- '[size=9dp] \n[/size]Transaction Fee[size=9dp]\n'\
- '[color=#ADAEAE]Minimum is BTC {}[/color][/size]'.format(self.min_fee)
- title_size: '24sp'
- on_activate:
- ti_fee.focus = True
- if self.return_obj:\
- ti_fee.text = "BTC " + self.return_obj.amt
- on_deactivate: ti_fee.focus = False
- on_release:
- if self.return_obj and ti_fee.text:\
- txt = ti_fee.text;\
- spc = txt.rfind(' ') + 1;\
- txt = '' if spc == 0 else txt[spc:];\
- num = 0 if not txt else float(txt);\
- self.return_obj.amt = max(self.min_fee, txt)
- root.dismiss()
- ELTextInput
- id: ti_fee
- size_hint: 1, None
- height: '34dp'
- multiline: False
- on_text_validate: root.dispatch('on_release', self)
- pos_hint: {'center_y': .7}
- text: "BTC " + root.min_fee
- input_type: 'number'
-
-
-<ScreenSend>
- mode: 'address'
- name: 'send'
- action_view: Factory.SendActionView()
- on_deactivate:
- self.ids.amount_e.focus = False
- self.ids.payto_e.focus = False
- self.ids.message_e.focus = False
- BoxLayout
- padding: '12dp', '12dp', '12dp', '12dp'
- spacing: '12dp'
- orientation: 'vertical'
- mode: 'address'
- SendReceiveToggle:
- SendToggle:
- id: toggle_address
- text: 'ADDRESS'
- group: 'send_type'
- state: 'down' if root.mode == 'address' else 'normal'
- source: 'atlas://gui/kivy/theming/light/globe'
- background_down: 'atlas://gui/kivy/theming/light/btn_send_address'
- on_release:
- if root.mode == 'address': root.mode = 'fc'
- root.mode = 'address'
- SendToggle:
- id: toggle_nfc
- text: 'NFC'
- group: 'send_type'
- state: 'down' if root.mode == 'nfc' else 'normal'
- source: 'atlas://gui/kivy/theming/light/nfc'
- background_down: 'atlas://gui/kivy/theming/light/btn_send_nfc'
- on_release:
- if root.mode == 'nfc': root.mode = 'str'
- root.mode = 'nfc'
- GridLayout:
- id: grid
- cols: 1
- size_hint: 1, None
- height: self.minimum_height
- SendReceiveCardTop
- id: card_address
- BoxLayout
- size_hint: 1, None
- height: '42dp'
- rows: 1
- Label
- id: lbl_symbl
- bold: True
- color: amount_e.foreground_color
- text_size: self.size
- valign: 'bottom'
- halign: 'left'
- font_size: '22sp'
- text:
- u'[font={fnt}]{smbl}[/font]'.\
- format(smbl=btc_symbol if app.base_unit == 'BTC' else mbtc_symbol, fnt=font_light)
- size_hint_x: .25
- ELTextInput:
- id: amount_e
- input_type: 'number'
- multiline: False
- bold: True
- font_size: '50sp'
- foreground_color: .308, .308, .308, 1
- background_normal: 'atlas://gui/kivy/theming/light/tab_btn'
- pos_hint: {'top': 1.5}
- size_hint: .7, None
- height: '67dp'
- hint_text: 'Amount'
- text: '0.0'
- on_text_validate: payto_e.focus = True
- CardSeparator
- BoxLayout:
- size_hint: 1, None
- height: '42dp'
- spacing: '5dp'
- Label:
- id: fee_e
- color: .761, .761, .761, 1
- font_size: '12dp'
- amt: app.format_amount(app.wallet.fee_per_kb(app.gui_object.config)) if app.wallet else 0
- text:
- u'[b]{sign}{symbl}{amt}[/b] of fee'.\
- format(symbl=lbl_symbl.text,\
- sign='+' if self.amt > 0 else '-', amt=self.amt)
- size_hint_x: None
- width: self.texture_size[0]
- halign: 'left'
- valign: 'middle'
- IconButton:
- color: 0.694, 0.694, 0.694, 1
- source: 'atlas://gui/kivy/theming/light/gear'
- pos_hint: {'center_y': .5}
- size_hint: None, None
- size: '22dp', '22dp'
- on_release:
- dlg = Cache.get('electrum_widgets', 'TransactionFeeDialog')
-
- if not dlg:\
- Factory.register('SelectionDialog', module='electrum_gui.kivy.uix.dialogs');\
- dlg = Factory.TransactionFeeDialog();\
- Cache.append('electrum_widgets', 'TransactionDialog', dlg)
-
- dlg.return_obj = fee_e
- dlg.open()
- Label:
- font_size: '12dp'
- color: fee_e.color
- text: u'= {}'.format(app.create_quote_text(Decimal(float(amount_e.text)), mode='symbol')) if amount_e.text else u'0'
- text_size: self.size
- halign: 'right'
- valign: 'middle'
- SendReceiveBlueBottom:
- id: blue_bottom
- size_hint: 1, None
- height: self.minimum_height
- BoxLayout
- size_hint: 1, None
- height: blue_bottom.item_height
- spacing: '5dp'
- Image:
- source: 'atlas://gui/kivy/theming/light/contact'
- size_hint: None, None
- size: '22dp', '22dp'
- pos_hint: {'center_y': .5}
- TextInputSendBlue:
- id: payto_e
- hint_text: "Enter Contact or adress"
- on_text_validate:
- Factory.Animation(opacity=1,\
- height=blue_bottom.item_height)\
- .start(message_selection)
- message_e.focus = True
- Widget:
- size_hint: None, None
- width: dp(2)
- height: qr.height
- pos_hint: {'center_y':.5}
- canvas.after:
- Rectangle:
- size: self.size
- pos: self.pos
- IconButton:
- id: qr
- source: 'atlas://gui/kivy/theming/light/qrcode'
- pos_hint: {'center_y': .5}
- size_hint: None, None
- size: '22dp', '22dp'
- on_release: app.scan_qr(on_complete=root.set_qr_data)
- CardSeparator
- opacity: message_selection.opacity
- color: blue_bottom.foreground_color
- BoxLayout:
- id: message_selection
- opacity: 1 if app.expert_mode else 0
- size_hint: 1, None
- height: blue_bottom.item_height if app.expert_mode else 0
- spacing: '5dp'
- Image:
- source: 'atlas://gui/kivy/theming/light/pen'
- size_hint: None, None
- size: '22dp', '22dp'
- pos_hint: {'center_y': .5}
- TextInputSendBlue:
- id: message_e
- hint_text: 'Enter description here'
- on_text_validate:
- anim = Factory.Animation(opacity=1, height=blue_bottom.item_height)
- anim.start(wallet_selection)
- #anim.start(address_selection)
- CardSeparator
- opacity: wallet_selection.opacity
- color: blue_bottom.foreground_color
- WalletSelector:
- id: wallet_selection
- foreground_color: blue_bottom.foreground_color
- opacity: 1 if app.expert_mode else 0
- size_hint: 1, None
- height: blue_bottom.item_height if app.expert_mode else 0
- CardSeparator
- opacity: address_selection.opacity
- color: blue_bottom.foreground_color
- AddressSelector:
- id: address_selection
- foreground_color: blue_bottom.foreground_color
- opacity: 1 if app.expert_mode else 0
- size_hint: 1, None
- height: blue_bottom.item_height if app.expert_mode else 0
- CreateAccountButtonGreen:
- background_color: (1, 1, 1, 1) if self.disabled else ((.258, .80, .388, 1) if self.state == 'normal' else (.203, .490, .741, 1))
- text: _('Send')
- size_hint_y: None
- height: '38dp'
- disabled: False
- on_release: app.do_send()
- Widget
-
-
-<SendToggle@ToggleButton>
- source: ''
- group: 'transfer_type'
- markup: False
- bold: True
- border: 4, 4, 4, 4
- background_normal: self.background_down
- color:
- (.140, .140, .140, 1) if self.state == 'down' else (.796, .796, .796, 1)
- canvas.after:
- Color:
- rgba: 1, 1, 1, 1
- Image:
- source: root.source
- color: root.color
- size: '30dp', '30dp'
- center_x: root.center_x - ((root.texture_size[0]/2)+(self.width/1.5))
- center_y: root.center_y
-
-<BlueSpinner@BoxLayout>
- foreground_color: 1, 1, 1, 1
- spacing: '9dp'
- text: ''
- values: ('', )
- icon: ''
- Image:
- source: root.icon
- size_hint: None, None
- size: '22dp', '22dp'
- pos_hint: {'center_y': .5}
- OppositeSpinner:
- color: root.foreground_color
- background_normal: 'atlas://gui/kivy/theming/light/action_group_light'
- markup: False
- shorten: True
- font_size: '16dp'
- size_hint: 1, .7
- pos_hint: {'center_y': .5}
- text: root.text
- text_size: self.size
- halign: 'left'
- valign: 'middle'
- on_text:
- root.text = args[1]
- values: root.values
-
-<AddressSelector@BlueSpinner>
- icon: 'atlas://gui/kivy/theming/light/globe'
- values: app.wallet.addresses() if app.wallet else []
- text: _("Select Your address")
-
-<WalletSelector@BlueSpinner>
- icon: 'atlas://gui/kivy/theming/light/wallet'
- values: ('default Wallet',)
- text: _('Select your wallet')
-
-<SendReceiveToggle@BoxLayout>
- padding: '5dp', '5dp'
- size_hint: 1, None
- height: '45dp'
- canvas.before:
- Color:
- rgba: 1, 1, 1, 1
- BorderImage:
- border: 12, 12, 12, 12
- source: 'atlas://gui/kivy/theming/light/card'
- size: self.width + dp(3), self.height
- pos: self.x - dp(1.5), self.y
-
-<SendReceiveCardTop@GridLayout>
- canvas.before:
- BorderImage:
- border: 9, 9, 9, 9
- source: 'atlas://gui/kivy/theming/light/card_top'
- size: self.size
- pos:self.pos
- padding: '12dp', '22dp', '12dp', 0
- cols: 1
- size_hint: 1, None
- height: '120dp'
- spacing: '4dp'
-
-<SendReceiveBlueBottom@GridLayout>
- canvas.before:
- Color:
- rgba: .238, .585, .878, 1
- BorderImage:
- border: 9, 9, 9, 9
- source: 'atlas://gui/kivy/theming/light/card_bottom'
- size: self.size
- pos: self.pos
- Color:
- rgba: 1, 1, 1, 1
-
- item_height: dp(42)
- foreground_color: .843, .914, .972, 1
- cols: 1
- padding: '12dp', 0
-
-
-<ScreenReceive>
- mode: 'qr'
- name: 'receive'
- on_mode: if args[1] == 'nfc': from electrum_gui.kivy.nfc_scanner import NFCScanner
- action_view: Factory.ReceiveActionView()
- on_activate:
- self.ids.toggle_qr.state = 'down'
- first_address = app.wallet.addresses()[0]
- qr.data = app.encode_uri(first_address,
- amount=amount_e.text,
- label=app.wallet.labels.get(first_address, first_address),
- message='') if app.wallet and app.wallet.addresses() else ''
- on_deactivate:
- self.ids.amount_e.focus = False
- BoxLayout
- padding: '12dp', '12dp', '12dp', '12dp'
- spacing: '12dp'
- mode: 'qr'
- orientation: 'vertical'
- SendReceiveToggle
- SendToggle:
- id: toggle_qr
- text: 'QR'
- state: 'down' if root.mode == 'qr' else 'normal'
- source: 'atlas://gui/kivy/theming/light/qrcode'
- background_down: 'atlas://gui/kivy/theming/light/btn_send_address'
- on_release:
- if root.mode == 'qr': root.mode = 'nr'
- root.mode = 'qr'
- SendToggle:
- id: toggle_nfc
- text: 'NFC'
- state: 'down' if root.mode == 'nfc' else 'normal'
- source: 'atlas://gui/kivy/theming/light/nfc'
- background_down: 'atlas://gui/kivy/theming/light/btn_send_nfc'
- on_release:
- if root.mode == 'nfc': root.mode = 'nr'
- root.mode = 'nfc'
- GridLayout:
- id: grid
- cols: 1
- #size_hint: 1, None
- #height: self.minimum_height
- SendReceiveCardTop
- height: '110dp'
- BoxLayout:
- size_hint: 1, None
- height: '42dp'
- rows: 1
- Label:
- color: amount_e.foreground_color
- bold: True
- text_size: self.size
- valign: 'bottom'
- font_size: '22sp'
- text:
- u'[font={fnt}]{smbl}[/font]'.\
- format(smbl=btc_symbol if app.base_unit == 'BTC' else mbtc_symbol, fnt=font_light)
- size_hint_x: .25
- ELTextInput:
- id: amount_e
- input_type: 'number'
- multiline: False
- bold: True
- font_size: '50sp'
- foreground_color: .308, .308, .308, 1
- background_normal: 'atlas://gui/kivy/theming/light/tab_btn'
- pos_hint: {'top': 1.5}
- size_hint: .7, None
- height: '67dp'
- hint_text: 'Amount'
- text: '0.0'
- CardSeparator
- BoxLayout:
- size_hint: 1, None
- height: '32dp'
- spacing: '5dp'
- Label:
- color: lbl_quote.color
- font_size: '12dp'
- text: 'Ask to scan the QR below'
- text_size: self.size
- halign: 'left'
- valign: 'middle'
- Label:
- id: lbl_quote
- font_size: '12dp'
- size_hint: .5, 1
- color: .761, .761, .761, 1
- text: u'= {}'.format(app.create_quote_text(Decimal(float(amount_e.text)), mode='symbol')) if amount_e.text else u'0'
- text_size: self.size
- halign: 'right'
- valign: 'middle'
- SendReceiveBlueBottom
- id: blue_bottom
- padding: '12dp', 0, '12dp', '12dp'
- WalletSelector:
- id: wallet_selection
- foreground_color: blue_bottom.foreground_color
- size_hint: 1, None
- height: blue_bottom.item_height
- CardSeparator
- opacity: wallet_selection.opacity
- color: blue_bottom.foreground_color
- AddressSelector:
- id: address_selection
- foreground_color: blue_bottom.foreground_color
- opacity: 1 if app.expert_mode else 0
- size_hint: 1, None
- height: blue_bottom.item_height if app.expert_mode else 0
- on_text:
- if not args[1].startswith('Select'):\
- qr.data = app.encode_uri(args[1],\
- amount=amount_e.text,\
- label=app.wallet.labels.get(args[1], args[1]),\
- message='')
- CardSeparator
- opacity: address_selection.opacity
- color: blue_bottom.foreground_color
- Widget:
- size_hint_y: None
- height: dp(10)
- FloatLayout
- id: bl
- QRCodeWidget:
- id: qr
- size_hint: None, 1
- width: min(self.height, bl.width)
- pos_hint: {'center': (.5, .5)}
- on_touch_down:
- if self.collide_point(*args[1].pos):\
- app.show_info_bubble(icon=self.ids.qrimage.texture, text='texture')
- CreateAccountButtonGreen:
- background_color: (1, 1, 1, 1) if self.disabled else ((.258, .80, .388, 1) if self.state == 'normal' else (.203, .490, .741, 1))
- text: _('Goto next step') if app.wallet and app.wallet.seed else _('Create unsigned transaction')
- size_hint_y: None
- height: '38dp'
- disabled: True if wallet_selection.opacity == 0 else False
- on_release:
- message = 'sending {} {} to {}'.format(\
- app.base_unit, amount_e.text, payto_e.text)
- app.gui.main_gui.do_send(self, message=message)
-
-<ReceiveActionView@ActionView>
- WalletActionPrevious:
- id: action_previous
- width: '32dp'
- ActionButton:
- id: action_logo
- important: True
- size_hint: 1, 1
- markup: True
- mipmap: True
- bold: True
- markup: True
- color: 1, 1, 1, 1
- text:
- "[color=#777777][sub] [sup][size=9dp]{}[/size][/sup][/sub]{}[/color]"\
- .format(app.base_unit, app.status)
- font_size: '22dp'
- minimum_width: '1dp'
- Butt_star:
- id: but_star
- on_release:
- if self.state == 'down':\
- app.show_info_bubble(\
- text='[b]Expert mode on[/b]\n you can now select your address',\
- icon='atlas://gui/kivy/theming/light/star_big_inactive',\
- duration=1, arrow_pos='', width='250dp')
-
-###############################################
-## Wallet Management
-###############################################
-
-<WalletManagement@ScrollView>
- canvas.before:
- Color:
- rgba: .145, .145, .145, 1
- Rectangle:
- size: root.size
- pos: root.pos
- VGridLayout:
- Wallets:
- id: wallets_section
- Plugins:
- id: plugins_section
- Commands:
- id: commands_section
-
-<WalletManagementItem@BoxLayout>
-
-<Header@WalletManagementItem>
-
-<Wallets@VGridLayout>
- Header
-
-<Plugins@VGridLayout>
- Header
-
-<Commands@VGridLayout>
- Header
-
-<StripLayout>
- padding: 0, 0, 0, 0
-
-<TabbedCarousel>
- carousel: carousel
- do_default_tab: False
- Carousel:
- scroll_timeout: 190
- anim_type: 'out_quart'
- min_move: .05
- anim_move_duration: .1
- anim_cancel_duration: .54
- scroll_distance: '10dp'
- on_index: root.on_index(*args)
- id: carousel
-
-<CScreen>
- content: None
- state: 'deactivated'
- on_enter: self.state = 'loading'
- on_activate:
- self.state = 'activated'
- on_leave: self.state = 'unloading'
- on_deactivate: self.state = 'deactivated'
- color: 1, 1, 1, 1
- Image:
- source: 'atlas://gui/kivy/theming/light/logo_atom_dull'
- size_hint: (None, None)
- pos_hint: {'center_x': .5, 'y': .02}
- allow_stretch: True
- size: ('32dp', '32dp')
- #Label:
- #id: screen_label
- #size: root.size
- #font_size: '45sp'
- #color: root.color
- #text: '' if root.state == 'activated' or root.content else 'Loading...'
-
-<EScreen>
- background_color: .929, .929, .929 ,1
- effects: [self.scrollflex]
-
-<OppositeDropDown@DropDown>
- #auto_width: False
- size_hint: None, None
- size: self.container.minimum_size if self.container else (0, 0)
- on_container: if args[1]: self.container.padding = '4dp', '4dp', '4dp', '4dp'
- canvas.before:
- Color:
- rgba: 1, 1, 1, 1
- BorderImage:
- pos:self.pos
- border: 20, 20, 20, 20
- source: 'atlas://gui/kivy/theming/light/dropdown_background'
- size: self.size
-
-<LightOptions@SpinnerOption>
- font_size: '14sp'
- border: 4, 4, 4, 4
- color: 0.439, 0.439, 0.439, .8
- background_normal: 'atlas://gui/kivy/theming/light/action_button_group'
- background_down: 'atlas://gui/kivy/theming/light/overflow_btn_dn'
- size_hint_y: None
- height: '48dp'
- text_size: self.size[0] - dp(20), self.size[1]
- halign: 'left'
- valign: 'middle'
- shorten: True
- on_press:
- ddn = self.parent.parent
- Factory.Animation(opacity=0, d=.25).start(ddn)
-
-
-<OppositeSpinner@CSpinner>
- dropdown_cls: Factory.OppositeDropDown
- option_cls: Factory.LightOptions
- border: 20, 20, 9, 9
- background_normal: 'atlas://gui/kivy/theming/light/action_group_dark'
- background_down: self.background_normal
- values: ('Copy to clipboard', 'Send Payment')
- size_hint: None, 1
- width: '12dp'
- on_release:
- ddn = self._dropdown
- ddn.opacity = 0
- Factory.Animation(opacity=1, d=.25).start(ddn)
-
-<NewContactDialog>
- title: _('[size=7dp] \n[/size] Add a Contact[size=7dp]\n[/size]')
- title_size: '24sp'
- border: 7, 7, 7, 7
- size_hint: None, None
- size: '320dp', '235dp'
- pos_hint: {'center_y': .53}
- separator_color: .89, .89, .89, 1
- separator_height: '1.2dp'
- title_color: .437, .437, .437, 1
- background: 'atlas://gui/kivy/theming/light/dialog'
- padding: 0, 0
- on_parent:
- self.content.padding = 0, 0, 0, 0
- self.content.parent.parent.padding = 2, 12, 2, 2
- self.content.parent.parent.spacing = 0, -2
- BoxLayout:
- id: bl
- spacing: '1.2dp'
- canvas:
- Color:
- rgba: .901, .901, .901, 1
- Rectangle:
- size: self.size
- pos: self.pos
- ContactButton:
- source: 'atlas://gui/kivy/theming/light/qrcode'
- text: _('QR Scan')
- on_release: root.load_qr_scanner()
- ContactButton:
- id: but_contact
- source: 'atlas://gui/kivy/theming/light/manualentry'
- text: 'Manual Enrty'
- on_release:
- root.new_contact()
- FloatLayout:
- size_hint: None, None
- size: 0, 0
- CloseButton:
- id: but_close
- top: root.top - dp(5)
- right: root.right - dp(5)
- on_release: root.dismiss()
-
-
-<DialogButton@Button>
- border: 12, 12, 12, 12
- background_normal: 'atlas://gui/kivy/theming/light/dialog'
- background_down: ''
- background_color: (.94, .94, .94, 1) if self.state == 'normal' else (.191, .496, .742, 1)
-
-
-<ContactButton@DialogButton>
- source: ''
- color: 0, 0, 0, 0
- item_color: (.211, .211, .211, 1) if root.state == 'normal' else (1, 1, 1, 1)
- Image:
- id: img
- allow_stretch: True
- color: root.item_color
- mipmap: True
- source: root.source
- center: (root.center, self.size)[0]
- size: root.width/2., root.height/2.
- Label:
- text: root.text
- color: root.item_color
- size: img.width, self.texture_size[1]
- center: root.center_x, img.y - (self.height/2)
-
-
-<CarouselHeader>
- border: 0, 0, 0, 0
- text: repr(self)
- color: 0, 0, 0, 0
- background_normal: 'atlas://gui/kivy/theming/light/carousel_selected'
- background_down: 'atlas://gui/kivy/theming/light/carousel_deselected'
- on_state:
- o = .5 if args[1] == 'down' else 1
- anim=Factory.Animation(opacity=o, d=.2).start(self)
-
-<CarouselIndicator@TabbedCarousel>
- tab_pos: 'bottom_mid'
- tab_height: '32dp'
- tab_width: self.tab_height
- background_image: 'atlas://data/images/defaulttheme/action_item'
- strip_border: 0, 0, 0, 0
-
-<-CarouselDialog>
- header_color: '#707070ff'
- text_color: 0.701, 0.701, 0.701, 1
- title_size: '13sp'
- title: ''
- separator_color: 0.89, 0.89, 0.89, 1
- background: 'atlas://gui/kivy/theming/light/tab_btn'
- carousel_content: carousel_content
- canvas.before:
- Color:
- rgba: 0, 0, 0, .9
- Rectangle:
- size: Window.size
- pos: 0, 0
- Color:
- rgba: 1, 1, 1, 1
- BorderImage:
- border: 12, 12, 12, 12
- source: 'atlas://gui/kivy/theming/light/dialog'
- size: root.width, root.height - self.carousel_content.tab_height if self.carousel_content else 0
- pos: root.x, self.y + self.carousel_content.tab_height if self.carousel_content else 10
- BoxLayout:
- orientation: 'vertical'
- GridLayout:
- cols: 1
- size_hint: 1, None
- height: self.minimum_height
- padding: 0, '7sp'
- Label:
- font_size: root.title_size
- text: u'[color={}]{}[/color]'.format(root.header_color, root.title)
- text_size: self.width, None
- halign: 'left'
- size_hint: 1, None
- height: self.texture_size[1]
- CardSeparator:
- color: root.separator_color
- height: root.separator_height
- FloatLayout:
- size_hint: None, None
- size: 0, 0
- CloseButton:
- id: but_close
- top: root.top - dp(10)
- right: root.right - dp(10)
- on_release: root.dismiss()
- CarouselIndicator:
- id: carousel_content
-
-<WalletAddressesDialog>
- wallet_name: 'Default Wallet'
- on_parent: if args[1]: self.children[0].padding = '15dp', '6dp', '15dp', 0
- title_color: .437, .437, .437
- title_size: '23sp'
- separator_height: '1dp'
- size_hint: None, None
- width: min(Window.width - dp(27), dp(360))
- height: min(Window.height - dp(70), self.width * 1.5)
- title: '[size=5sp] \n[/size]{}[size=9sp]\n'.format(self.wallet_name)
-
-<ScreenAddress>
- name: 'addresses'
- BoxLayout:
- size_hint: 1, .95
- pos_hint: {'top':1}
- orientation: 'vertical'
- padding: 0, '2.2dp'
- Label:
- markup: False
- color: 0, 0, 0, .3
- text: 'Your bitcoin address:'
- font_size: '15sp'
- text_size: self.width, None
- halign: 'left'
- size_hint: 1, None
- height: self.texture_size[1]
- shorten: True
- BoxLayout:
- orientation: 'vertical'
- spacing: dp(5)
- BoxLayout:
- size_hint: 1, None
- spacing: dp(5)
- height: '27dp'
- OppositeSpinner:
- id: btn_address
- markup: False
- color: 0.439, 0.439, 0.439, 1
- font_size: '14sp'
- text_size: self.width - dp(22), self.height
- shorten: True
- halign: 'left'
- valign: 'middle'
- size_hint: .8, .8
- pos_hint: {'center_y': .5}
- on_text:
- if args[1]: qr.data = app.encode_uri(root.labels[args[1]])
- FloatLayout
- id: fl_paste
- size_hint: None, 1
- width: '37dp'
- Button:
- right: fl_paste.right
- y: fl_paste.y
- size_hint: None, None
- height: '37dp'
- width: self.height
- border: 2, 2, 2, 2
- background_color: .705, .705, .705, 1.5 if self.state == 'normal' else 2
- background_normal: 'atlas://gui/kivy/theming/light/paste_icon'
- background_down: self.background_normal
- on_release:
- app.copy(root.labels[btn_address.text])
- app.show_info_bubble(\
- text='Copied', width='50dp', arrow_pos='', duration=3,\
- pos=(Window.width/2, root.parent.top + dp(18)))
- QRCodeWidget:
- id: qr
- show_border: False
-
-<CurrencyLabel@Label>
- color: .698, .701, .701, 1
- font_size: '14sp'
- text_size: self.width, None
- halign: 'left'
-
-<CurrencySpinner@OppositeSpinner>
- size_hint_x: None
- width: '60dp'
- text_size: self.width, None
- font_size: '18sp'
- halign: 'left'
- color: .698, .701, .701, 1
-
-<SelectionDialog>
- border: 7, 7, 7, 7
- size_hint: None, None
- size: '320dp', '200dp'
- pos_hint: {'center_y': .53}
- separator_color: .89, .89, .89, 1
- separator_height: '1.1dp'
- title_color: .437, .437, .437, 1
- background: 'atlas://gui/kivy/theming/light/dialog'
- on_parent: self.content.parent.parent.padding = '12dp', 0, '12dp', '12dp'
- RelativeLayout:
- orientation: 'vertical'
- padding: 0, '6dp', 0, 0
- RelativeLayout:
- id: container
- BoxLayout
- size_hint_y: None
- height: '48dp'
- pos_hint: {'y':0}
- DialogButton:
- id: btn_cancel
- text: _('Cancel')
- markup: False
- color: .439, .439, .439, 1
- background_color:
- (.235, .588, .882, 1) if self.state[0] == 'd'\
- else (.890, .890, .890, 1)
- on_release:
- root.dismiss()
- Widget:
- size_hint_x: None
- width: '24dp'
- DialogButton:
- id: btn_ok
- text: _('Ok')
- background_color:
- (.235, .588, .882, 1) if self.state[0] == 'n'\
- else (.890, .890, .890, 1)
- on_release:
- root.dispatch('on_release', self)
- FloatLayout:
- size_hint: None, None
- size: 0, 0
- CloseButton:
- id: but_close
- top: root.height - dp(18)
- right: root.width - dp(18)
- on_release: root.dismiss()
-
-
-<CurrencySelectionDialog@SelectionDialog>
- title: '[size=9dp] \n[/size]Currency Selection[size=7dp]\n[/size]'
- title_size: '24sp'
- on_activate:
- spinner_exchanges.text = app.exchanger.use_exchange
- spinner_currencies.text = app.exchanger.currency
- on_release:
- app.exchanger.currency = spinner_currencies.text
- app.exchanger.use_exchange = spinner_exchanges.text
- root.dismiss()
- BoxLayout
- size_hint_y: None
- height: '24dp'
- spacing: '24dp'
- pos_hint: {'top': .95, 'x': 0}
- CurrencyLabel:
- text: _('Currency')
- size_hint_x: .4
- CurrencyLabel:
- id: lbl_source
- text: _('Exchange Source')
- BoxLayout:
- spacing: '24dp'
- size_hint_y: None
- height: '32dp'
- pos_hint: {'x': 0, 'top': .8}
- CurrencySpinner:
- id: spinner_currencies
- text: app.exchanger.currency
- values: app.currencies
- Widget:
- CurrencySpinner:
- id: spinner_exchanges
- text: app.exchanger.use_exchange
- pos: lbl_source.x, spinner_currencies.y
- width: '140dp'
- height: spinner_currencies.height
- values: app.exchanger.exchanges
-
-<RecentActivityDialog>
- on_parent:
- if args[1]:\
- self.children[0].padding = '15dp', '6dp', '15dp', 0
- is_mine: True
- amount: '0.00'
- amount_color: '#000000ff'
- quote_text: '0'
- address: u''
- address_known: unicode(self.address or self.address[1:]) in app.contacts.keys() + self.labels.keys()
- confirmations: 0
- date: '0/0/0'
- fee: _('unknown')
- labels: {}
- status: 'unknown'
- separator_height: '1dp'
- time: _('00:00')
- tx_hash: None
- title:
- u'[size=9] \n[/size]'\
- u'[size={sz}sp][color={clr}]'.format(sz=25.7 if self.width > dp(300) else 22, clr=root.header_color) + \
- _(u'You ') + (_(u'sent') if self.is_mine else _(u'received')) + u'[/color]'\
- '[color={clr}] [font={fnt}]{smbl}[/font]{amt}[/color][/size]\n'.format(\
- clr=root.amount_color, smbl=btc_symbol if app.base_unit == 'BTC' else mbtc_symbol, fnt=font_light, amt=root.amount[:9]) + \
- _(u'About ') + root.quote_text + _(u' at transaction time') + \
- u'[size={}dp] \n[/size]'.format(5 if self.width > dp(300) else 1)
- size_hint: None, None
- width: min(Window.width - dp(27), dp(320))
- height: max(grid.height + dp(120), dp(320))
- font_size: '13sp'
- CScreen:
- tab: screen_details
- GridLayout
- id: grid
- padding: 0, 0, 0, '12dp'
- spacing: '18dp'
- cols: 1
- size_hint: 1, None
- height: self.minimum_height
- pos_hint: {'top':1}
- GridLayout:
- cols: 1
- size_hint_y: None
- height: '39sp'
- spacing: '5dp'
- CardLabel:
- color: root.text_color
- font_size: root.font_size
- text: _('To') if root.is_mine else _('From')
- BoxLayout:
- id: bl_address
- spacing: '4dp'
- size_hint_y: None
- height: '32dp'
- padding: 0, 0, 0, '9dp'
- OppositeSpinner:
- id: btn_address
- markup: False
- color: 0.45, 0.45, 0.45, 1
- font_name: font_light
- font_size: '15sp'
- text: root.address
- shorten: True
- size_hint: None, 1
- text_size: self.width - dp(30), self.height
- halign: 'left'
- width: min(self._label.get_extents(self.text)[0] + dp(32), bl_address.width)
- on_release:
- self._dropdown.auto_width = False
- self._dropdown.width = max(self.width, dp(140))
- on_text:
- if args[1] != root.address[1:]:\
- root.dropdown_selected(args[1]);\
- self.text = root.address
- GridLayout:
- cols: 2
- spacing: '18dp'
- size_hint: 1, None
- height: self.minimum_height
- CardLabel:
- color: root.text_color
- font_size: root.font_size
- text:
- _('Date') + '[color={}][size=4dp]\n\n[/size]'\
- '[size=18dp]{}[/size][/color]'.format(\
- root.header_color, root.date)
- CardLabel:
- color: root.text_color
- font_size: root.font_size
- text:
- _('Status') +\
- '[size=4dp]\n\n[/size]'\
- '[color={}][size=18dp]{}[/size][/color]'.format(\
- '#009900' if root.status == 'Validated' else root.header_color,\
- root.status)
- CardLabel:
- color: root.text_color
- font_size: root.font_size
- text:
- _('Time') +\
- '[size=4dp]\n\n[/size]'\
- '[color={}][size=18dp]{}[/size][/color]'.format(\
- root.header_color, root.time)
- CardLabel:
- color: root.text_color
- font_size: root.font_size
- text:
- _('Confirmations') +\
- '[size=4dp]\n\n[/size]'\
- '[color={}][size=18dp]{}'\
- '[/size][/color]'.format(root.header_color, root.confirmations)
- GridLayout:
- id: fl
- size_hint: 1, None
- height: self.minimum_height
- cols: 1
- BoxLayout:
- size_hint: 1, None
- height: '48sp' if self.opacity else 0
- opacity: 1 if root.is_mine else 0
- CardLabel
- size_hint: 1, 1
- text_size: self.size
- valign: 'top'
- font_size: root.font_size
- color: root.text_color
- markup: True
- text:
- _('Transaction Fees') +\
- '[size=4dp]\n\n[/size]'\
- '[color={}][size=18dp]{}'\
- '[/size][/color]'.format(root.header_color, root.fee)
- CardLabel:
- size_hint: 1, 1
- text_size: self.size
- valign: 'top'
- font_size: root.font_size
- color: root.text_color
- text: _('Wallet')
- markup: True
- DialogButton:
- id: btn_dialog
- size_hint: 1, None
- height: '48sp' if self.opacity else 0
- opacity: 0 if root.is_mine or root.address_known else 1
- background_color:
- (.191, .496, .742, 1) if self.state == 'normal'\
- else (.933, .933, .933, 1)
- color:
- (1, 1, 1, 1) if self.state == 'normal'\
- else (.218, .218, .218, 1)
- disabled: False if self.opacity else True
- text: _('Add address to contacts')
- on_release:
- root.dismiss()
- app.save_new_contact(root.address[1:], '')
- CScreen:
- tab: transaction_id
- color: .5, .5, .5, .5
- on_activate: root.activate_screen_transactionid(self)
- CScreen:
- id: list_inputs
- color: .5, .5, .5, .5
- data: ''
- tab: inputs
- on_enter: root.activate_screen_inputs(self)
- CScreen:
- id: list_outputs
- color: .5, .5, .5, .5
- data: ''
- tab: outputs
- on_enter: root.activate_screen_outputs(self)
-
- # define the tab headers here
- CarouselHeader:
- id: screen_details
- slide: 0
- CarouselHeader:
- id: transaction_id
- slide: 1
- CarouselHeader:
- id: inputs
- slide: 2
- CarouselHeader:
- id: outputs
- slide: 3
-
-<RecentActivityScrOutputs@GridView>
- pos_hint:{'top': 1}
- size_hint_y: .9
- headers: [_('Address'), _('Amount')]
- widths:[root.width*.63, root.width*.36]
-
-<RecentActivityScrInputs@GridView>
- pos_hint:{'top': 1}
- size_hint_y: .9
- headers: [_('Address'), _('Previous output')]
- widths:[root.width*.63, root.width*.36]
-
-<RecentActivityScrTransID@GridLayout>
- cols: 1
- padding: '5dp'
- spacing: '2dp'
- text_color: 1, 1, 1
- tx_hash: None
- carousel_content: None
- CardLabel:
- color: root.text_color
- font_size: '13dp'
- text: _('Transaction ID :')
- ELTextInput:
- readonly: True
- text: root.tx_hash if root.tx_hash else ''
- size_hint_y: None
- height: '30dp'
- BoxLayout:
- padding: 0, '9pt', 0, 0
- orientation: 'vertical'
- spacing: '5dp'
- DialogButton:
- background_color:
- (.191, .496, .742, 1) if self.state == 'normal'\
- else (.933, .933, .933, 1)
- color:
- (1, 1, 1, 1) if self.state == 'normal'\
- else (.218, .218, .218, 1)
- text: 'Inputs >>'
- size_hint_y: None
- height: '38dp'
- on_release:
- root.carousel_content.carousel.load_next()
- DialogButton:
- text: 'Outputs >>>'
- background_color:
- (.191, .496, .742, 1) if self.state == 'normal'\
- else (.933, .933, .933, 1)
- color:
- (1, 1, 1, 1) if self.state == 'normal'\
- else (.218, .218, .218, 1)
- size_hint_y: None
- height: '38dp'
- on_release:
- carousel = root.carousel_content.carousel
- carousel.load_slide(carousel.slides[3])
- Widget
-
-
-################################
-## Cards (under Dashboard)
-################################
-
-<Card@GridLayout>
- cols: 1
- padding: '12dp' , '22dp', '12dp' , '12dp'
- spacing: '12dp'
- size_hint: 1, None
- height: max(100, self.minimum_height)
- canvas.before:
- Color:
- rgba: 1, 1, 1, 1
- BorderImage:
- border: 18, 18, 18, 18
- source: 'atlas://gui/kivy/theming/light/card'
- size: self.size
- pos: self.pos
-
-<CardLabel@Label>
- color: 0.45, 0.45, 0.45, 1
- size_hint: 1, None
- text: ''
- text_size: self.width, None
- height: self.texture_size[1]
- halign: 'left'
- valign: 'top'
-
-<CardButton@Button>
- background_normal: 'atlas://gui/kivy/theming/light/card_btn'
- bold: True
- font_size: '10sp'
- color: 0.699, 0.699, 0.699, 1
- size_hint: None, None
- size: self.texture_size[0] + dp(32), self.texture_size[1] + dp(7)
-
-<CardSeparator@Widget>
- size_hint: 1, None
- height: dp(1)
- color: .909, .909, .909, 1
- canvas:
- Color:
- rgba: root.color if root.color else (0, 0, 0, 0)
- Rectangle:
- size: self.size
- pos: self.pos
-
-<CardItem@ButtonBehavior+GridLayout>
- canvas.before:
- Color:
- rgba: 0.192, .498, 0.745, 1 if self.state == 'down' else 0
- Rectangle
- size: self.size
- pos: self.x, self.y + dp(5)
- cols: 1
- padding: '2dp', '2dp'
- spacing: '2dp'
- size_hint: 1, None
- height: self.minimum_height
-
-<RecentActivityItem@CardItem>
- icon: 'atlas://gui/kivy/theming/light/important'
- address:'no address set'
- amount: '+0.00'
- balance: 'xyz'# balance_after
- amount_color: '#DB3627' if float(self.amount) < 0 else '#2EA442'
- confirmations: 0
- date: '0/0/0'
- quote_text: '.'
-
- spacing: '9dp'
- on_release:
- dash = app.root.main_screen.ids.tabs.ids.screen_dashboard
- dash.show_tx_details(root)
- BoxLayout:
- size_hint: 1, None
- spacing: '8dp'
- height: '32dp'
- Image:
- id: icon
- source: root.icon
- size_hint: None, 1
- width: self.height *.54
- mipmap: True
- BoxLayout:
- orientation: 'vertical'
- Widget
- CardLabel:
- shorten: True
- text: root.address
- markup: False
- text_size: self.size
- CardLabel:
- color: .699, .699, .699, 1
- text: root.date
- font_size: '12sp'
- Widget
- CardLabel:
- halign: 'right'
- font_size: '13sp'
- size_hint: None, 1
- width: '90sp'
- markup: True
- font_name: font_light
- text:
- u'[color={amount_color}]{sign}{symbol}{amount}[/color]\n'\
- u'[color=#B2B3B3][size=12sp]{qt}[/size]'\
- u'[/color]'.format(amount_color=root.amount_color,\
- amount=root.amount[1:], qt=root.quote_text, sign=root.amount[0],\
- symbol=btc_symbol if app.base_unit == 'BTC' else mbtc_symbol)
- CardSeparator
-
-<CardRecentActivity@Card>
- BoxLayout:
- size_hint: 1, None
- height: lbl.height
- CardLabel:
- id: lbl
- text: _('RECENT ACTIVITY')
- CardButton:
- id: btn_see_all
- disabled: True if not self.opacity else False
- text: _('SEE ALL')
- font_size: '12sp'
- on_release: app.update_history_tab(see_all=True)
- GridLayout:
- id: content
- spacing: '7dp'
- cols: 1
- size_hint: 1, None
- height: self.minimum_height
- CardSeparator
-
-<CardPaymentRequest@Card>
- CardLabel:
- text: _('PAYMENT REQUEST')
- CardSeparator:
-
-<CardStatusInfo@Card>
- padding: '12dp' , '12dp'
- status: app.status
- quote_text: ''
- unconfirmed: ''
- cols: 2
- FloatLayout
- anchor_x: 'left'
- size_hint: 1, None
- height: '82dp'
- IconButton:
- mipmap: True
- pos_hint: {'x': 0, 'center_y': .45}
- color: .90, .90, .90, 1
- source: 'atlas://gui/kivy/theming/light/qrcode'
- size_hint: None, .85
- width: self.height
- on_release:
- dlg = Cache.get('electrum_widgets', 'WalletAddressesDialog')
-
- if not dlg:\
- Factory.register('WalletAddressesDialog', module='electrum_gui.kivy.uix.dialogs.carousel_dialog');\
- dlg = Factory.WalletAddressesDialog();\
- Cache.append('electrum_widgets', 'WalletAddressesDialog', dlg)
-
- dlg.open()
- CardLabel:
- id: top_label
- halign: 'right'
- valign: 'top'
- bold: True
- pos_hint: {'top': 1, 'right': 1}
- font_name: font_light
- balance_in_numbers: bool(ord(root.status[0]) not in range(ord('A'), ord('z')))
- font_size: '50sp' if self.balance_in_numbers else '30sp'
- text_size: self.width, root.height/2
- text:
- u'[color=#4E4F4F]{}{}[/color]'\
- .format('' if not self.balance_in_numbers else\
- (btc_symbol if app.base_unit == 'BTC' else mbtc_symbol), root.status)
- BoxLayout
- pos_hint: {'y': 0, 'right': 1}
- spacing: '5dp'
- CardLabel
- halign: 'right'
- markup: True
- font_size: '22dp'
- font_name: font_light
- text: u'[color=#c3c3c3]{}[/color]'.format(root.quote_text)
- IconButton
- color: .698, .698, .698, 1
- source: 'atlas://gui/kivy/theming/light/gear'
- size_hint_y: None
- height: '28dp'
- opacity: .5 if self.state == 'down' else 1
- on_release:
- dlg = Cache.get('electrum_widgets', 'CurrencySelectionDialog')
-
- if not dlg:\
- Factory.register('SelectionDialog', module='electrum_gui.kivy.uix.dialogs');\
- dlg = Factory.CurrencySelectionDialog();\
- Cache.append('electrum_widgets', 'CurrencySelectionDialog', dlg)
-
- dlg.open()
-
-<ActionDropDown>
- auto_width: False
- on_size: if not self.auto_width: self.width = dp(190)
- on_container: self.container.padding = '4dp', '4dp', '4dp', '4dp'
- on_parent:
- if args[1]:\
- self.opacity = 0;\
- anim = Factory.Animation(opacity=1, d=.25);\
- anim.start(self)
- canvas.before:
- Color:
- rgba: 1, 1, 1, 1
- BorderImage:
- pos:self.pos
- border: 20, 20, 20, 20
- source: 'atlas://gui/kivy/theming/light/overflow_background'
- size: self.size
-
-<ActionItem>
- color: 0.235, 0.239, 0.239, 1
-
-<ActionButton>:
- border: 4, 0, 0, 0
- background_down: 'atlas://gui/kivy/theming/light/overflow_btn_dn'
-
-<OverflowButton@ActionButton>
- text_size: dp(172), None
- last: False
- halign: 'left'
- valign: 'middle'
- overflow: None
- background_normal:
- 'atlas://gui/kivy/theming/light/' +\
- ('action_button_group'\
- if (self.inside_group and not self.last) else 'tab_btn')
- on_press:
- ddn = self.overflow._dropdown
- Factory.Animation.cancel_all(ddn)
- anim = Factory.Animation(opacity=0, d=.25)
- anim.bind(on_complete=ddn.dismiss)
- anim.start(ddn)
-
-<DashboardActionView@ActionView>
- WalletActionPrevious:
- id: action_previous
- size_hint_x: None
- width: action_preferences.width + action_contact.width
- ActionButton:
- id: action_logo
- important: True
- pos_hint: {'center_y': .5}
- size_hint: 1, .93
- bold: True
- icon: 'atlas://gui/kivy/theming/light/logo'
- background_down: self.background_normal
- minimum_width: '1dp'
- ActionButton:
- id: action_contact
- important: True
- width: '25dp'
- icon: 'atlas://gui/kivy/theming/light/add_contact'
- text: 'Add Contact'
- on_release:
- Factory.register('NewContactDialog', module='electrum_gui.kivy.uix.dialogs.new_contact')
- dlg = Factory.NewContactDialog().open()
-
- ActionOverflow:
- id: action_preferences
- background_down: 'atlas://gui/kivy/theming/light/overflow_btn_dn'
- border: 0, 0, 0, 0
- overflow_image: 'atlas://gui/kivy/theming/light/settings'
- width: '40dp'
- size_hint_x: None
- canvas.after:
- Color:
- rgba: 1, 1, 1, 1
- OverflowButton:
- text: _('Settings')
- overflow: action_preferences
- OverflowButton:
- text: _('Help')
- last: True
- overflow: action_preferences
-
-<ScreenDashboard>
- name: 'dashboard'
- action_view: Factory.DashboardActionView()
- content: content
- ScrollView:
- id: content
- do_scroll_x: False
- GridLayout
- id: grid
- cols: 1 #if root.width < root.height else 2
- size_hint: 1, None
- height: self.minimum_height
- padding: '12dp'
- spacing: '12dp'
- GridLayout:
- cols: 1
- size_hint: 1, None
- height: self.minimum_height
- spacing: '12dp'
- orientation: 'vertical'
- CardStatusInfo:
- id: status_card
- CardPaymentRequest:
- id: payment_card
- CardRecentActivity:
- id: recent_activity_card
-
-
-<CleanHeader@TabbedPanelHeader>
- border: 0, 0, 4, 0
- markup: False
- color: (.188, 0.505, 0.854, 1) if self.state == 'down' else (0.636, 0.636, 0.636, 1)
- text_size: self.size
- halign: 'center'
- valign: 'middle'
- bold: True
- font_size: '12.5sp'
- background_normal: 'atlas://gui/kivy/theming/light/tab_btn'
- background_disabled_normal: 'atlas://gui/kivy/theming/light/tab_btn_disabled'
- background_down: 'atlas://gui/kivy/theming/light/tab_btn_pressed'
- canvas.before:
- Color:
- rgba: 1, 1, 1, .7
- Rectangle:
- size: self.size
- pos: self.x + 1, self.y - 1
- texture: self.texture
-
-<ScreenTabs@Screen>
- TabbedCarousel:
- id: panel
- tab_height: '48dp'
- background_image: 'atlas://gui/kivy/theming/light/tab'
- strip_image: 'atlas://gui/kivy/theming/light/tab_strip'
- strip_border: dp(4), 0, dp(2), 0
- ScreenDashboard:
- id: screen_dashboard
- tab: tab_dashboard
- ScreenSend:
- id: screen_send
- tab: tab_send
- ScreenReceive:
- id: screen_receive
- tab: tab_receive
- ScreenContacts:
- id: screen_contacts
- tab: tab_contacts
- CleanHeader:
- id: tab_dashboard
- text: _('DASHBOARD')
- slide: 0
- CleanHeader:
- id: tab_send
- text: _('SEND')
- slide: 1
- CleanHeader:
- id: tab_receive
- text: _('RECEIVE')
- slide: 2
- CleanHeader:
- id: tab_contacts
- text: _('CONTACTS')
- slide: 3
-
-<MainScreen>
- name: 'main_screen'
- canvas.before:
- Color:
- rgba: 0.917, 0.917, 0.917, 1
- Rectangle:
- size: self.size
- pos: self.pos
- BoxLayout:
- orientation: 'vertical'
- ActionBar:
- id: action_bar
- size_hint: 1, None
- height: '48dp'
- border: 4, 4, 4, 4
- background_image: 'atlas://gui/kivy/theming/light/action_bar'
- ScreenManager:
- id: manager
- ScreenTabs:
- id: tabs
- name: "tabs"
- #ScreenPassword:
- # id: password
- # name: 'password
-
-<Drawer>
- #overlay_widget: overlay_widget
- RelativeLayout:
- id: hidden_widget
- size_hint: None, None
- width:
- (root.width * .877) if app.ui_mode[0] == 'p'\
- else root.width * .35 if app.orientation[0] == 'l'\
- else root.width * .10
- height: root.height
- canvas.before:
- Color:
- rgba: .176, .176, .176, 1
- Rectangle:
- size: self.size
- pos: self.pos
- Color
- rgba: 1, 1, 1, 1
- BorderImage
- border: 0, 32, 0, 0
- source: 'atlas://gui/kivy/theming/light/shadow_right'
- size: root.overlay_widget.x if root.overlay_widget else self.width, self.height
- RelativeLayout:
- id: overlay_widget
- size_hint: None, None
- x: hidden_widget.width if app.ui_mode[0] == 't' else 0
- size_hint: None, None
- width: (root.width - self.x) if app.ui_mode[0] == 't' else root.width
- height: root.height
-
-#######################################################
-## This is our child of the root widget of the app
-#######################################################
-Drawer
- size_hint: None, None
- size: Window.size
- WalletManagement
- id: wallet_management
- ScreenManager:
- # Screen manager for screens meant to change everything including
- # ActionBar, currently we only have the main screen here.
- id: manager
- MainScreen-
\ No newline at end of file