read amounts
authorThomasV <thomasv@gitorious>
Thu, 5 Jun 2014 10:20:15 +0000 (12:20 +0200)
committerThomasV <thomasv@gitorious>
Thu, 5 Jun 2014 10:43:11 +0000 (12:43 +0200)
gui/qt/paytoedit.py

index 3691148..23c6ef8 100644 (file)
@@ -51,14 +51,24 @@ class PayToEdit(QTextEdit):
         e.setFrame(True)
 
 
-    def parse_line(self, line):
-        recipient, amount = line.split(',')
-        amount = Decimal(amount.strip())
-        recipient = recipient.strip()
-        m = re.match(RE_ALIAS, recipient)
-        to_address = m.group(2) if m else recipient
-        assert bitcoin.is_address(to_address)
-        return to_address, amount
+    def parse_address_and_amount(self, line):
+        x, y = line.split(',')
+        address = self.parse_address(x)
+        amount = self.parse_amount(y)
+        return address, amount
+
+
+    def parse_amount(self, x):
+        p = pow(10, self.amount_edit.decimal_point())
+        return int( p * Decimal(x.strip()))
+
+
+    def parse_address(self, line):
+        r = line.strip()
+        m = re.match('^'+RE_ALIAS+'$', r)
+        address = m.group(2) if m else r
+        assert bitcoin.is_address(address)
+        return address
 
 
     def check_text(self):
@@ -67,22 +77,61 @@ class PayToEdit(QTextEdit):
         outputs = []
         total = 0
 
+        if len(lines) == 1:
+            try:
+                self.payto_address = self.parse_address(lines[0])
+            except:
+                self.payto_address = None
+
+            if self.payto_address:
+                print "unlock", self.payto_address
+                self.unlock_amount()
+                return
+
         for line in lines:
             try:
-                to_address, amount = self.parse_line(line)
+                to_address, amount = self.parse_address_and_amount(line)
             except:
                 continue
+                
             outputs.append((to_address, amount))
             total += amount
 
         self.outputs = outputs
+        self.payto_address = None
+
+        if total:
+            self.amount_edit.setAmount(total)
+        else:
+            self.amount_edit.setText("")
 
-        self.amount_edit.setText(str(total) if total else "")
         if total or len(lines)>1:
             self.lock_amount()
         else:
             self.unlock_amount()
 
+
+
+    def get_outputs(self):
+
+        if self.payto_address:
+            
+            if not bitcoin.is_address(self.payto_address):
+                QMessageBox.warning(self, _('Error'), _('Invalid Bitcoin Address') + ':\n' + to_address, _('OK'))
+                return
+
+            try:
+                amount = self.amount_edit.get_amount()
+            except Exception:
+                QMessageBox.warning(self, _('Error'), _('Invalid Amount'), _('OK'))
+                return
+
+            outputs = [(self.payto_address, amount)]
+            return outputs
+
+        return self.outputs
+
+
     def lines(self):
         return str(self.toPlainText()).split('\n')