Abstract and enable qrscanner dialog for send screen.

This commit is contained in:
akshayaurora 2014-06-24 22:09:11 +05:30 committed by ThomasV
parent 33c89b47d8
commit f442cc31e4
7 changed files with 39 additions and 22 deletions

View File

@ -200,6 +200,14 @@ class ElectrumWindow(App):
def set_url(self, instance, url):
self.gui_object.set_url(url)
def scan_qr(self, on_complete):
dlg = Cache.get('electrum_widgets', 'QrScannerDialog')
if not dlg:
dlg = Factory.QrScannerDialog()
Cache.append('electrum_widgets', 'QrScannerDialog', dlg)
dlg.bind(on_complete=on_complete)
dlg.open()
def build(self):
global Builder
if not Builder:

View File

@ -56,4 +56,5 @@ class ScannerBase(AnchorLayout):
QRScanner = core_select_lib('qr_scanner', (
('android', 'scanner_android', 'ScannerAndroid'),
('camera', 'scanner_camera', 'ScannerCamera')), False, 'electrum_gui.kivy')
Factory.register('QRScanner', cls=QRScanner)

View File

@ -1,22 +1,28 @@
from kivy.uix.camera import Camera
from kivy.clock import Clock
from kivy.utils import platform
import iconv
from electrum_gui.kivy.qr_scanner import ScannerBase
import iconv
try:
from zbar import ImageScanner, Config, Image, Symbol
except ImportError:
raise SystemError('unable to import zbar please make sure you have it installed')
raise SystemError('unable to import zbar please make sure you have'
' it installed.\nFor mac osx: `brew install zbar then\n`'
'`pip install https://github.com/npinchot/zbar/archive/d3c1611ad2411fbdc3e79eb96ca704a63d30ae69.zip`')
try:
import Image as PILImage
from PIL import Image as PILImage
except ImportError:
raise SystemError('unable to import Pil/pillow please install one of the two.')
raise SystemError('unable to import Pil/pillow'
' please install one of the two.')
__all__ = ('ScannerCamera', )
class ScannerCamera(ScannerBase):
'''Widget that use the kivy.uix.camera.Camera and zbar to detect qrcode.
When found, the `symbols` will be updated
'''Widget that use the kivy.uix.camera.Camera and zbar to detect
qrcode. When found, the `symbols` will be updated
'''
def __init__(self, **kwargs):
@ -48,7 +54,8 @@ class ScannerCamera(ScannerBase):
self._camera.play = False
Clock.unschedule(self._detect_qrcode_frame)
# TODO: testing for various platforms(windows, mac)
self._camera._camera._pipeline.set_state(1)
if platform == 'linux':
self._camera._camera._pipeline.set_state(1)
#self._camera = None
def _detect_qrcode_frame(self, *args):

View File

@ -9,12 +9,7 @@ class NewContactDialog(Factory.AnimatedPopup):
def load_qr_scanner(self):
self.dismiss()
dlg = Cache.get('electrum_widgets', 'QrScannerDialog')
if not dlg:
dlg = Factory.QrScannerDialog()
Cache.append('electrum_widgets', 'QrScannerDialog', dlg)
dlg.bind(on_complete=self.on_complete)
dlg.open()
App.get_running_app().scan_qr(on_complete=self.on_complete)
def on_complete(self, instance, uri):
self.new_contact(uri=uri)

View File

@ -4,9 +4,9 @@ from kivy.lang import Builder
Factory.register('QRScanner', module='electrum_gui.kivy.qr_scanner')
class QrScannerDialog(Factory.AnimaterPopup):
class QrScannerDialog(Factory.AnimatedPopup):
__events__('on_complete', )
__events__ = ('on_complete', )
def on_symbols(self, instance, value):
instance.stop()
@ -18,6 +18,11 @@ class QrScannerDialog(Factory.AnimaterPopup):
#message = uir.get('message', '')
self.dispatch('on_omplete', uri)
def on_complete(self):
''' Default Handler for on_complete event.
'''
pass
Builder.load_string('''
<QrScannerDialog>
@ -27,7 +32,7 @@ Builder.load_string('''
title_size: '24sp'
border: 7, 7, 7, 7
size_hint: None, None
size: '320dp', '270dp'
size: '340dp', '290dp'
pos_hint: {'center_y': .53}
separator_color: .89, .89, .89, 1
separator_height: '1.2dp'

View File

@ -101,12 +101,13 @@ class MainScreen(Factory.Screen):
class ScreenSend(CScreen):
def scan_qr(self):
pop = Factory.QrScannerDialog(on_complete=self.set_qr_data)
pop.open()
def set_qr_data(self, uri):
self.ids.payto_e
self.ids.payto_e.text = uri.get('address')
self.ids.message_e.text = uri.get('message')
self.ids.amount_e.text = uri.get('amount')
#label = uri.get('label')
#if label:
# TODO: update label, add to contacts
class ScreenReceive(CScreen):

View File

@ -336,7 +336,7 @@
pos_hint: {'center_y': .5}
size_hint: None, None
size: '22dp', '22dp'
on_release: root.scan_qr()
on_release: app.scan_qr(on_complete=root.set_qr_data)
CardSeparator
opacity: message_selection.opacity
color: blue_bottom.foreground_color