def show_qr(self):
     text = self.tx.raw.decode("hex")
     text = base_encode(text, base=43)
     try:
         self.parent.show_qrcode(text, "Transaction")
     except Exception as e:
         self.show_message(str(e))
    def main(self):
        add_menu()
        welcome = "Use the menu to scan a transaction."
        droid.fullShow(qr_layout(welcome))
        while True:
            event = droid.eventWait().result
            if not event:
                continue
            elif event["name"] == "key":
                if event["data"]["key"] == "4":
                    if self.qr_data:
                        self.show_qr(None)
                        self.show_title(welcome)
                    else:
                        break

            elif event["name"] == "seed":
                password = self.get_password()
                if password is False:
                    modal_dialog("Error", "incorrect password")
                    continue
                seed = wallet.get_mnemonic(password)
                modal_dialog("Your seed is", seed)

            elif event["name"] == "password":
                self.change_password_dialog()

            elif event["name"] == "xpub":
                mpk = wallet.get_master_public_key()
                self.show_qr(mpk)
                self.show_title("master public key")

            elif event["name"] == "scan":
                r = droid.scanBarcode()
                r = r.result
                if not r:
                    continue
                data = r["extras"]["SCAN_RESULT"]
                data = base_decode(data.encode("utf8"), None, base=43)
                data = "".join(chr(ord(b)) for b in data).encode("hex")
                tx = Transaction(data)
                # except:
                #    modal_dialog('Error', 'Cannot parse transaction')
                #    continue
                if not wallet.can_sign(tx):
                    modal_dialog("Error", "Cannot sign this transaction")
                    continue
                lines = map(lambda x: x[0] + u"\t\t" + format_satoshis(x[1]) if x[1] else x[0], tx.get_outputs())
                if not modal_question("Sign?", "\n".join(lines)):
                    continue
                password = self.get_password()
                if password is False:
                    modal_dialog("Error", "incorrect password")
                    continue
                droid.dialogCreateSpinnerProgress("Signing")
                droid.dialogShow()
                wallet.sign_transaction(tx, password)
                droid.dialogDismiss()
                data = base_encode(str(tx).decode("hex"), base=43)
                self.show_qr(data)
                self.show_title("Signed Transaction")

        droid.makeToast("Bye!")