URI: 
       tAdded send functionality. Still needs to have the password dialog, and final testing. - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit aeecd6c4c24d3f7f2ed9606b17197782de317276
   DIR parent ba6e9417ed959587368a82d046080ff349472794
  HTML Author: Amir Taaki <genjix@riseup.net>
       Date:   Fri, 29 Jun 2012 09:41:56 +0200
       
       Added send functionality. Still needs to have the password dialog, and final testing.
       
       Diffstat:
         M lib/gui_lite.py                     |     114 +++++++++++++++++++++-----------
       
       1 file changed, 76 insertions(+), 38 deletions(-)
       ---
   DIR diff --git a/lib/gui_lite.py b/lib/gui_lite.py
       t@@ -1,17 +1,20 @@
        from PyQt4.QtCore import *
        from PyQt4.QtGui import *
       +from decimal import Decimal as D
        from i18n import _
       -import decimal
        import random
        import re
        import sys
        import time
       +import wallet
        
        try:
            import lib.gui_qt as gui_qt
        except ImportError:
            import electrum.gui_qt as gui_qt
        
       +bitcoin = lambda v: v * 100000000
       +
        def IconButton(filename, parent=None):
            pixmap = QPixmap(filename)
            icon = QIcon(pixmap)
       t@@ -112,8 +115,7 @@ class MiniWindow(QDialog):
                # This is changed according to the user's displayed balance
                self.amount_validator = QDoubleValidator(self.amount_input)
                self.amount_validator.setNotation(QDoubleValidator.StandardNotation)
       -        self.amount_validator.setRange(0, 0)
       -        self.amount_validator.setDecimals(2)
       +        self.amount_validator.setDecimals(8)
                self.amount_input.setValidator(self.amount_validator)
        
                amount_layout = QHBoxLayout()
       t@@ -156,7 +158,6 @@ class MiniWindow(QDialog):
            def set_balances(self, btc_balance, quote_balance, quote_currency):
                self.balance_label.set_balances( \
                    btc_balance, quote_balance, quote_currency)
       -        self.amount_validator.setRange(0, btc_balance)
                main_account_info = \
                    "Checking - %s BTC (%s %s)" % (btc_balance,
                                                   quote_balance, quote_currency)
       t@@ -165,8 +166,10 @@ class MiniWindow(QDialog):
                self.accounts_selector.addAction("%s" % main_account_info)
        
            def send(self):
       -        self.actuator.send(self.address_input.text(),
       -                           self.amount_input.text(), self)
       +        if self.actuator.send(self.address_input.text(),
       +                              self.amount_input.text(), self):
       +            self.address_input.become_inactive()
       +            self.amount_input.become_inactive()
        
            def address_field_changed(self, address):
                if self.actuator.is_valid(address):
       t@@ -229,6 +232,29 @@ class TextedLineEdit(QLineEdit):
                # also possible but more expensive:
                #qApp.setStyleSheet(qApp.styleSheet())
        
       +class PasswordDialog(QDialog):
       +
       +    def __init__(self, parent):
       +        super(QDialog, self).__init__(self)
       +
       +        self.setModal(True)
       +
       +        self.password_input = QLineEdit()
       +        self.password_input.setEchoMode(QLineEdit.Password)
       +
       +        main_layout = QVBoxLayout(self)
       +        message = _('Please enter your password')
       +        main_layout.addWidget(QLabel(message))
       +
       +        grid = QGridLayout()
       +        grid.setSpacing(8)
       +        grid.addWidget(QLabel(_('Password')), 1, 0)
       +        grid.addWidget(self.password_input, 1, 1)
       +        vbox.addLayout(grid)
       +
       +        vbox.addLayout(ok_cancel_buttons(d))
       +        d.setLayout(vbox) 
       +
        class MiniActuator:
        
            def __init__(self, wallet):
       t@@ -240,32 +266,15 @@ class MiniActuator:
                qApp.clipboard().setText(random.choice(addrs))
        
            def send(self, address, amount, parent_window):
       -        recipient = unicode(address).strip()
       +        dest_address = self.fetch_destination(address)
        
       -        # alias
       -        match1 = re.match(ALIAS_REGEXP, r)
       -        # label or alias, with address in brackets
       -        match2 = re.match('(.*?)\s*\<([1-9A-HJ-NP-Za-km-z]{26,})\>', r)
       -        
       -        if match1:
       -            dest_address = \
       -                self.wallet.get_alias(recipient, True, 
       -                                      self.show_message, self.question)
       -            if not dest_address:
       -                return
       -        elif match2:
       -            dest_address = match2.group(2)
       -        else:
       -            dest_address = recipient
       -
       -        if not self.wallet.is_valid(dest_address):
       +        if dest_address is None or not self.wallet.is_valid(dest_address):
                    QMessageBox.warning(parent_window, _('Error'), 
       -                _('Invalid Bitcoin Address') + ':\n' + dest_address, _('OK'))
       -            return
       +                _('Invalid Bitcoin Address') + ':\n' + address, _('OK'))
       +            return False
        
                convert_amount = lambda amount: \
       -            int(decimal.Decimal(unicode(amount)) * 100000000)
       -
       +            int(D(unicode(amount)) * bitcoin(1))
                amount = convert_amount(amount)
        
                if self.wallet.use_encryption:
       t@@ -275,19 +284,48 @@ class MiniActuator:
                else:
                    password = None
        
       +        fee = 0
       +        # 0.1 BTC = 10000000
       +        if amount < bitcoin(1) / 10:
       +            # 0.01 BTC
       +            fee = bitcoin(1) / 100
       +
                try:
                    tx = self.wallet.mktx(dest_address, amount, "", password, fee)
       -        except BaseException, e:
       -            self.show_message(str(e))
       -            return
       +        except BaseException as error:
       +            QMessageBox.warning(parent_window, _('Error'), str(error), _('OK'))
       +            return False
                    
       -        status, msg = self.wallet.sendtx( tx )
       -        if status:
       -            QMessageBox.information(self, '', _('Payment sent.')+'\n'+msg, _('OK'))
       -            self.do_clear()
       -            self.update_contacts_tab()
       +        #status, msg = self.wallet.sendtx( tx )
       +        status, message = "hello", "world"
       +        if not status:
       +            QMessageBox.warning(parent_window, _('Error'), message, _('OK'))
       +            return False
       +
       +        QMessageBox.information(parent_window, '',
       +            _('Payment sent.') + '\n' + message, _('OK'))
       +        return True
       +
       +    def fetch_destination(self, address):
       +        recipient = unicode(address).strip()
       +
       +        # alias
       +        match1 = re.match("^(|([\w\-\.]+)@)((\w[\w\-]+\.)+[\w\-]+)$",
       +                          recipient)
       +
       +        # label or alias, with address in brackets
       +        match2 = re.match("(.*?)\s*\<([1-9A-HJ-NP-Za-km-z]{26,})\>",
       +                          recipient)
       +        
       +        if match1:
       +            dest_address = \
       +                self.wallet.get_alias(recipient, True, 
       +                                      self.show_message, self.question)
       +            return dest_address
       +        elif match2:
       +            return match2.group(2)
                else:
       -            QMessageBox.warning(self, _('Error'), msg, _('OK'))
       +            return recipient
        
            def is_valid(self, address):
                return self.wallet.is_valid(address)
       t@@ -359,7 +397,7 @@ class MiniDriver(QObject):
        
            def update_balance(self):
                conf_balance, unconf_balance = self.wallet.get_balance()
       -        balance = conf_balance if unconf_balance is None else unconf_balance
       +        balance = D(conf_balance + unconf_balance) / bitcoin(1)
                self.window.set_balances(balance, balance * 6, 'EUR')
        
        if __name__ == "__main__":