URI: 
       tkivy: move amount dialog - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 5e5f3202b10a65061b433c6bde55da5ee941c497
   DIR parent c55a253f6d8b659bacaac90ab4ea4ccb9fe7ab15
  HTML Author: ThomasV <thomasv@electrum.org>
       Date:   Mon, 14 Dec 2015 14:27:39 +0100
       
       kivy: move amount dialog
       
       Diffstat:
         M gui/kivy/main_window.py             |      23 +++++++----------------
         A gui/kivy/uix/dialogs/amount_dialog… |     114 +++++++++++++++++++++++++++++++
         D gui/kivy/uix/ui_screens/amount.kv   |      97 ------------------------------
         D gui/kivy/uix/ui_screens/mainscreen… |    1775 -------------------------------
       
       4 files changed, 121 insertions(+), 1888 deletions(-)
       ---
   DIR diff --git a/gui/kivy/main_window.py b/gui/kivy/main_window.py
       t@@ -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):
   DIR diff --git a/gui/kivy/uix/dialogs/amount_dialog.py b/gui/kivy/uix/dialogs/amount_dialog.py
       t@@ -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
       +
   DIR diff --git a/gui/kivy/uix/ui_screens/amount.kv b/gui/kivy/uix/ui_screens/amount.kv
       t@@ -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()
   DIR diff --git a/gui/kivy/uix/ui_screens/mainscreen.kv b/gui/kivy/uix/ui_screens/mainscreen.kv
       t@@ -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