URI: 
       tkivy: label dialogs - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 8977493a6278256e42d2b32b9e47959c92f7c1ea
   DIR parent 98d43846417ee6986cd96b5699b03a55ca5eb916
  HTML Author: ThomasV <thomasv@electrum.org>
       Date:   Mon, 14 Dec 2015 12:08:11 +0100
       
       kivy: label dialogs
       
       Diffstat:
         M gui/kivy/main.kv                    |       4 ++--
         M gui/kivy/main_window.py             |      13 ++++++++++---
         M gui/kivy/uix/context_menu.py        |       5 ++++-
         A gui/kivy/uix/dialogs/label_dialog.… |      54 +++++++++++++++++++++++++++++++
         M gui/kivy/uix/screens.py             |      12 +++++++++++-
         M gui/kivy/uix/ui_screens/receive.kv  |      12 ++++++------
         M gui/kivy/uix/ui_screens/send.kv     |      14 +++++++-------
       
       7 files changed, 94 insertions(+), 20 deletions(-)
       ---
   DIR diff --git a/gui/kivy/main.kv b/gui/kivy/main.kv
       t@@ -208,12 +208,12 @@
            values: [] #app.wallet.addresses() if app.wallet else []
            text: _("Select Your address")
        
       -<AmountButton@Button>:
       +<BlueButton@Button>:
            background_color: .238, .585, .878, 0
            halign: 'left'
            text_size: (self.width-10, None)
            size_hint: 0.5, None
       -    default_text: 'Amount'
       +    default_text: ''
            text: self.default_text
            padding: '5dp', '5db'
            height: '40dp'
   DIR diff --git a/gui/kivy/main_window.py b/gui/kivy/main_window.py
       t@@ -33,6 +33,7 @@ Factory.register('InstallWizard',
        Factory.register('InfoBubble', module='electrum_gui.kivy.uix.dialogs')
        Factory.register('ELTextInput', module='electrum_gui.kivy.uix.screens')
        
       +
        #from kivy.core.window import Window
        #Window.softinput_mode = 'below_target'
        
       t@@ -719,12 +720,18 @@ class ElectrumWindow(App):
                popup.tx_hash = obj.tx_hash
                popup.open()
        
       -    def tx_label_dialog(self, obj):
       -        pass
       -
            def address_dialog(self, screen):
                pass
        
       +    def description_dialog(self, screen):
       +        from uix.dialogs.label_dialog import LabelDialog
       +        text = screen.message
       +        def callback(text):
       +            screen.message = text
       +        d = LabelDialog(_('Enter description'), text, callback)
       +        d.open()
       +
       +
            def amount_dialog(self, screen, show_max):
                popup = Builder.load_file('gui/kivy/uix/ui_screens/amount.kv')
                but_max = popup.ids.but_max
   DIR diff --git a/gui/kivy/uix/context_menu.py b/gui/kivy/uix/context_menu.py
       t@@ -39,5 +39,8 @@ class ContextMenu(Bubble):
                for k, v in action_list:
                    l = MenuItem()
                    l.text = k
       -            l.on_release = lambda f=v: f(obj)
       +            def func(f=v):
       +                f(obj)
       +                if self.parent: self.parent.hide_menu()
       +            l.on_release = func
                    self.ids.buttons.add_widget(l)
   DIR diff --git a/gui/kivy/uix/dialogs/label_dialog.py b/gui/kivy/uix/dialogs/label_dialog.py
       t@@ -0,0 +1,54 @@
       +from kivy.app import App
       +from kivy.factory import Factory
       +from kivy.properties import ObjectProperty
       +from kivy.lang import Builder
       +
       +Builder.load_string('''
       +<LabelDialog@Popup>
       +    id: popup
       +    title: ''
       +    size_hint: 0.8, 0.3
       +    BoxLayout:
       +        orientation: 'vertical'
       +        Widget:
       +            size_hint: 1, 0.2
       +        TextInput:
       +            id:input
       +            padding: '5dp'
       +            size_hint: 1, None
       +            height: '27dp'
       +            pos_hint: {'center_y':.5}
       +            text:''
       +            multiline: False
       +            background_normal: 'atlas://gui/kivy/theming/light/tab_btn'
       +            background_active: 'atlas://gui/kivy/theming/light/textinput_active'
       +            hint_text_color: self.foreground_color
       +            foreground_color: 1, 1, 1, 1
       +            font_size: '16dp'
       +            focus: True
       +        Widget:
       +            size_hint: 1, 0.2
       +        BoxLayout:
       +            orientation: 'horizontal'
       +            size_hint: 1, 0.5
       +            Button:
       +                text: 'Cancel'
       +                size_hint: 0.5, None
       +                height: '48dp'
       +                on_release: popup.dismiss()
       +            Button:
       +                text: 'OK'
       +                size_hint: 0.5, None
       +                height: '48dp'
       +                on_release:
       +                    root.callback(input.text)
       +                    popup.dismiss()
       +''')
       +
       +class LabelDialog(Factory.Popup):
       +
       +    def __init__(self, title, text, callback):
       +        Factory.Popup.__init__(self)
       +        self.ids.input.text = text
       +        self.callback = callback
       +        self.title = title
   DIR diff --git a/gui/kivy/uix/screens.py b/gui/kivy/uix/screens.py
       t@@ -95,7 +95,17 @@ class HistoryScreen(CScreen):
            def __init__(self, **kwargs):
                self.ra_dialog = None
                super(HistoryScreen, self).__init__(**kwargs)
       -        self.menu_actions = [ (_('Label'), self.app.tx_label_dialog), (_('Details'), self.app.tx_details_dialog)]
       +        self.menu_actions = [ (_('Label'), self.label_dialog), (_('Details'), self.app.tx_details_dialog)]
       +
       +    def label_dialog(self, obj):
       +        from dialogs.label_dialog import LabelDialog
       +        key = obj.tx_hash
       +        text = self.app.wallet.get_label(key)[0]
       +        def callback(text):
       +            self.app.wallet.set_label(key, text)
       +            self.update()
       +        d = LabelDialog(_('Enter Transaction Label'), text, callback)
       +        d.open()
        
            def get_history_rate(self, btc_balance, timestamp):
                date = timestamp_to_datetime(timestamp)
   DIR diff --git a/gui/kivy/uix/ui_screens/receive.kv b/gui/kivy/uix/ui_screens/receive.kv
       t@@ -56,8 +56,9 @@ ReceiveScreen:
                            size_hint: None, None
                            size: '22dp', '22dp'
                            pos_hint: {'center_y': .5}
       -                AmountButton:
       +                BlueButton:
                            id: amount_label
       +                    default_text: 'Amount'
                            text: s.amount if s.amount else 'Amount'
                            on_release: app.amount_dialog(s, False)
                    CardSeparator:
       t@@ -74,11 +75,10 @@ ReceiveScreen:
                            size_hint: None, None
                            size: '22dp', '22dp'
                            pos_hint: {'center_y': .5}
       -                TextInputBlue:
       -                    id: message_input
       -                    hint_text: 'Description'
       -                    text: s.message
       -                    on_text_validate: s.message = self.text
       +                BlueButton:
       +                    id: description
       +                    text: s.message if s.message else _('Description')
       +                    on_release: app.description_dialog(s)
                BoxLayout:
                    size_hint: 1, None
                    height: '48dp'
   DIR diff --git a/gui/kivy/uix/ui_screens/send.kv b/gui/kivy/uix/ui_screens/send.kv
       t@@ -32,7 +32,7 @@ SendScreen:
                            size_hint: None, None
                            size: '22dp', '22dp'
                            pos_hint: {'center_y': .5}
       -                AmountButton:
       +                BlueButton:
                            id: payto_e
                            text: s.address if s.address else _('Recipient')
                            on_release: app.address_dialog(s)
       t@@ -47,8 +47,9 @@ SendScreen:
                            size_hint: None, None
                            size: '22dp', '22dp'
                            pos_hint: {'center_y': .5}
       -                AmountButton:
       +                BlueButton:
                            id: amount_e
       +                    default_text: _('Amount')
                            text: s.amount if s.amount else _('Amount')
                            on_release: app.amount_dialog(s, True)
        
       t@@ -66,11 +67,10 @@ SendScreen:
                            size_hint: None, None
                            size: '22dp', '22dp'
                            pos_hint: {'center_y': .5}
       -                TextInputBlue:
       -                    id: message_e
       -                    hint_text: _('Description')
       -                    text: s.message
       -                    on_text_validate: s.message = self.text
       +                BlueButton:
       +                    id: description
       +                    text: s.message if s.message else _('Description')
       +                    on_release: app.description_dialog(s)
                BoxLayout:
                    size_hint: 1, None
                    height: '48dp'