qrscanner: use win.show_qr_code
[electrum-nvc.git] / plugins / pointofsale.py
index fd62b89..27f4ccd 100644 (file)
@@ -1,6 +1,7 @@
 import re
 import platform
 from decimal import Decimal
+from urllib import quote
 
 from PyQt4.QtGui import *
 from PyQt4.QtCore import *
@@ -20,7 +21,7 @@ elif platform.system() == 'Darwin':
 else:
     MONOSPACE_FONT = 'monospace'
 
-column_index = 3
+column_index = 4
 
 class QR_Window(QWidget):
 
@@ -65,7 +66,10 @@ class QR_Window(QWidget):
         amount_text = ''
         if amount:
             if currency:
-                self.amount = Decimal(amount) / self.exchanger.exchange(1, currency) if currency else amount
+                try:
+                    self.amount = Decimal(amount) / self.exchanger.exchange(1, currency) if currency else amount
+                except Exception:
+                    self.amount = None
             else:
                 self.amount = Decimal(amount)
             self.amount = self.amount.quantize(Decimal('1.0000'))
@@ -73,6 +77,9 @@ class QR_Window(QWidget):
             if currency:
                 amount_text += "<span style='font-size: 18pt'>%s %s</span><br/>" % (amount, currency)
             amount_text += "<span style='font-size: 21pt'>%s</span> <span style='font-size: 16pt'>BTC</span> " % str(self.amount) 
+        else:
+            self.amount = None
+            
         self.amount_label.setText(amount_text)
 
         self.label = label
@@ -83,9 +90,11 @@ class QR_Window(QWidget):
         if self.amount is not None:
             msg += '?amount=%s'%(str( self.amount))
             if self.label is not None:
-                msg += '&label=%s'%(self.label)
+                encoded_label = quote(self.label)
+                msg += '&label=%s'%(encoded_label)
         elif self.label is not None:
-            msg += '?label=%s'%(self.label)
+            encoded_label = quote(self.label)
+            msg += '?label=%s'%(encoded_label)
             
         self.qrw.set_addr( msg )
 
@@ -108,7 +117,8 @@ class Plugin(BasePlugin):
         self.merchant_name = self.config.get('merchant_name', 'Invoice')
 
         self.window.expert_mode = True
-        self.window.receive_list.setHeaderLabels([ _('Address'), _('Label'), _('Balance'), _('Request')])
+        self.window.receive_list.setColumnCount(5)
+        self.window.receive_list.setHeaderLabels([ _('Address'), _('Label'), _('Balance'), _('Tx'), _('Request')])
         self.requested_amounts = {}
         self.toggle_QR_window(True)
 
@@ -126,6 +136,9 @@ class Plugin(BasePlugin):
 
     def close(self):
         self.window.receive_list.setHeaderLabels([ _('Address'), _('Label'), _('Balance'), _('Tx')])
+        self.window.receive_list.setColumnCount(4)
+        for i,width in enumerate(self.window.column_widths['receive']):
+            self.window.receive_list.setColumnWidth(i, width)
         self.toggle_QR_window(False)
     
 
@@ -202,7 +215,7 @@ class Plugin(BasePlugin):
             return
 
         text = text.strip().upper()
-        print text
+        #print text
         m = re.match('^(\d*(|\.\d*))\s*(|BTC|EUR|USD|GBP|CNY|JPY|RUB|BRL)$', text)
         if m and m.group(1) and m.group(1)!='.':
             amount = m.group(1)
@@ -241,7 +254,8 @@ class Plugin(BasePlugin):
         item.setFlags(Qt.ItemIsSelectable | Qt.ItemIsUserCheckable | Qt.ItemIsEnabled | Qt.ItemIsDragEnabled)
 
     
-    def receive_menu(self, menu):
+    def receive_menu(self, menu, addr):
         menu.addAction(_("Request amount"), self.edit_amount)
+        menu.addAction(_("Show Invoice"), lambda: self.toggle_QR_window(True))