예제 #1
0
 def delete_wallet(self):
     from .uix.dialogs.question import Question
     basename = os.path.basename(self.wallet.storage.path)
     d = Question(_('Delete wallet?') + '\n' + basename, self._delete_wallet)
     d.open()
예제 #2
0
 def _delete_wallet(self, b):
     if b:
         basename = os.path.basename(self.wallet.storage.path)
         self.protected(_("Enter your PIN code to confirm deletion of {}").format(basename), self.__delete_wallet, ())
예제 #3
0
class InfoBubble(Factory.Bubble):
    '''Bubble to be used to display short Help Information'''

    message = StringProperty(_('Nothing set !'))
    '''Message to be displayed; defaults to "nothing set"'''

    icon = StringProperty('')
    ''' Icon to be displayed along with the message defaults to ''

    :attr:`icon` is a  `StringProperty` defaults to `''`
    '''

    fs = BooleanProperty(False)
    ''' Show Bubble in half screen mode

    :attr:`fs` is a `BooleanProperty` defaults to `False`
    '''

    modal = BooleanProperty(False)
    ''' Allow bubble to be hidden on touch.

    :attr:`modal` is a `BooleanProperty` defauult to `False`.
    '''

    exit = BooleanProperty(False)
    '''Indicates whether to exit app after bubble is closed.

    :attr:`exit` is a `BooleanProperty` defaults to False.
    '''

    dim_background = BooleanProperty(False)
    ''' Indicates Whether to draw a background on the windows behind the bubble.

    :attr:`dim` is a `BooleanProperty` defaults to `False`.
    '''
    def on_touch_down(self, touch):
        if self.modal:
            return True
        self.hide()
        if self.collide_point(*touch.pos):
            return True

    def show(self, pos, duration, width=None, modal=False, exit=False):
        '''Animate the bubble into position'''
        self.modal, self.exit = modal, exit
        if width:
            self.width = width
        if self.modal:
            from kivy.uix.modalview import ModalView
            self._modal_view = m = ModalView(background_color=[.5, .5, .5, .2])
            Window.add_widget(m)
            m.add_widget(self)
        else:
            Window.add_widget(self)

        # wait for the bubble to adjust it's size according to text then animate
        Clock.schedule_once(lambda dt: self._show(pos, duration))

    def _show(self, pos, duration):
        def on_stop(*l):
            if duration:
                Clock.schedule_once(self.hide, duration + .5)

        self.opacity = 0
        arrow_pos = self.arrow_pos
        if arrow_pos[0] in ('l', 'r'):
            pos = pos[0], pos[1] - (self.height / 2)
        else:
            pos = pos[0] - (self.width / 2), pos[1]

        self.limit_to = Window

        anim = Factory.Animation(opacity=1, pos=pos, d=.32)
        anim.bind(on_complete=on_stop)
        anim.cancel_all(self)
        anim.start(self)

    def hide(self, now=False):
        ''' Auto fade out the Bubble
        '''
        def on_stop(*l):
            if self.modal:
                m = self._modal_view
                m.remove_widget(self)
                Window.remove_widget(m)
            Window.remove_widget(self)
            if self.exit:
                App.get_running_app().stop()
                import sys
                sys.exit()
            else:
                App.get_running_app().is_exit = False

        if now:
            return on_stop()

        anim = Factory.Animation(opacity=0, d=.25)
        anim.bind(on_complete=on_stop)
        anim.cancel_all(self)
        anim.start(self)
예제 #4
0
 def proxy_status(self):
     server, port, protocol, proxy, auto_connect = self.app.network.get_parameters()
     return proxy.get('host') +':' + proxy.get('port') if proxy else _('None')
예제 #5
0
파일: screens.py 프로젝트: meonwax/electrum
 def do_paste(self):
     contents = unicode(self.app._clipboard.paste())
     if not contents:
         self.app.show_info(_("Clipboard is empty"))
         return
     self.set_URI(contents)
예제 #6
0
파일: screens.py 프로젝트: meonwax/electrum
 def do_share(self):
     uri = self.get_URI()
     self.app.do_share(uri, _("Share Bitcoin Request"))
 def callback(conf):
     if conf == pin:
         run_next(pin, False)
     else:
         self.show_error(_('PIN mismatch'))
         self.run('request_password', run_next)
예제 #8
0
 def _change_password2(self, cb, old_password, new_password):
     self.password_dialog(_('Confirm new PIN'), self._change_password3, (cb, old_password, new_password))
 def add_xpub_dialog(self, **kwargs):
     kwargs['message'] += ' ' + _(
         'Use the camera button to scan a QR code.')
     AddXpubDialog(self, **kwargs).open()
 def add_cosigner_dialog(self, **kwargs):
     kwargs['title'] = _("Add Cosigner") + " %d" % kwargs['index']
     kwargs['message'] = _(
         'Please paste your cosigners master public key, or scan it using the camera button.'
     )
     AddXpubDialog(self, **kwargs).open()
 def confirm_seed_dialog(self, **kwargs):
     kwargs['title'] = _('Confirm Seed')
     kwargs['message'] = _(
         'Please retype your seed phrase, to confirm that you properly saved it'
     )
     ConfirmSeedDialog(self, **kwargs).open()
 def do_qr(self):
     from qr_dialog import QRDialog
     popup = QRDialog(_("Master Public Key"), self.xpub, True)
     popup.open()
 def do_share(self):
     self.app.do_share(self.xpub, _("Master Public Key"))
예제 #14
0
 def show_seed(self, label):
     self.protected(_("Enter your PIN code in order to decrypt your seed"), self._show_seed, (label,))
예제 #15
0
 def do_sign(self):
     self.app.protected(_("Enter your PIN code in order to sign this transaction"), self._do_sign, ())
예제 #16
0
 def change_password(self, cb):
     if self.wallet.has_password():
         self.protected(_("Changing PIN code.") + '\n' + _("Enter your current PIN:"), self._change_password, (cb,))
     else:
         self._change_password(cb, None)
예제 #17
0
 def _do_sign(self, password):
     self.status_str = _('Signing') + '...'
     Clock.schedule_once(lambda dt: self.__do_sign(password), 0.1)
예제 #18
0
파일: screens.py 프로젝트: meonwax/electrum
    def on_amount_or_message(self):
        self.save_request()
        Clock.schedule_once(lambda dt: self.update_qr())

    def do_new(self):
        addr = self.get_new_address()
        if not addr:
            self.app.show_info(_('Please use the existing requests first.'))
        else:
            self.save_request()
            self.app.show_info(_('New request added to your list.'))


invoice_text = {
    PR_UNPAID:_('Pending'),
    PR_UNKNOWN:_('Unknown'),
    PR_PAID:_('Paid'),
    PR_EXPIRED:_('Expired')
}
request_text = {
    PR_UNPAID: _('Pending'),
    PR_UNKNOWN: _('Unknown'),
    PR_PAID: _('Received'),
    PR_EXPIRED: _('Expired')
}
pr_icon = {
    PR_UNPAID: 'atlas://gui/kivy/theming/light/important',
    PR_UNKNOWN: 'atlas://gui/kivy/theming/light/important',
    PR_PAID: 'atlas://gui/kivy/theming/light/confirmed',
    PR_EXPIRED: 'atlas://gui/kivy/theming/light/close'
예제 #19
0
 def __do_sign(self, password):
     try:
         self.app.wallet.sign_transaction(self.tx, password)
     except InvalidPassword:
         self.app.show_error(_("Invalid PIN"))
     self.update()
예제 #20
0
파일: screens.py 프로젝트: meonwax/electrum
 def update(self):
     if not self.screen.address:
         self.get_new_address()
     else:
         status = self.app.wallet.get_request_status(self.screen.address)
         self.screen.status = _('Payment received') if status == PR_PAID else ''
예제 #21
0
 def show_qr(self):
     from electroncash.bitcoin import base_encode
     text = str(self.tx).decode('hex')
     text = base_encode(text, base=43)
     self.app.qr_dialog(_("Raw Transaction"), text)
예제 #22
0
파일: screens.py 프로젝트: meonwax/electrum
 def do_copy(self):
     uri = self.get_URI()
     self.app._clipboard.copy(uri)
     self.app.show_info(_('Request copied to clipboard'))
예제 #23
0
 def __init__(self, msg, callback):
     Factory.Popup.__init__(self)
     self.title = _('Question')
     self.message = msg
     self.callback = callback