Add Mobile App connection UI
This commit is contained in:
parent
cf35953e69
commit
9e8dc1e99f
|
@ -1,6 +1,7 @@
|
|||
#include "mainwindow.h"
|
||||
#include "addressbook.h"
|
||||
#include "ui_mainwindow.h"
|
||||
#include "ui_mobileappconnector.h"
|
||||
#include "ui_addressbook.h"
|
||||
#include "ui_zboard.h"
|
||||
#include "ui_privkey.h"
|
||||
|
@ -62,6 +63,9 @@ MainWindow::MainWindow(QWidget *parent) :
|
|||
// z-Board.net
|
||||
QObject::connect(ui->actionz_board_net, &QAction::triggered, this, &MainWindow::postToZBoard);
|
||||
|
||||
// Connect mobile app
|
||||
QObject::connect(ui->actionConnect_Mobile_App, &QAction::triggered, this, &MainWindow::connectApp);
|
||||
|
||||
// Address Book
|
||||
QObject::connect(ui->action_Address_Book, &QAction::triggered, this, &MainWindow::addressBook);
|
||||
|
||||
|
@ -524,6 +528,39 @@ void MainWindow::donate() {
|
|||
ui->tabWidget->setCurrentIndex(1);
|
||||
}
|
||||
|
||||
void MainWindow::connectApp() {
|
||||
QDialog d(this);
|
||||
Ui_MobileAppConnector con;
|
||||
con.setupUi(&d);
|
||||
Settings::saveRestore(&d);
|
||||
|
||||
if (rpc->getConnection() == nullptr)
|
||||
return;
|
||||
|
||||
// Get the address of the localhost
|
||||
auto addrList = QNetworkInterface::allAddresses();
|
||||
|
||||
// Find a suitable address
|
||||
QString ipv4Addr;
|
||||
for (auto addr : addrList) {
|
||||
if (addr.isLoopback() || addr.protocol() == QAbstractSocket::IPv6Protocol)
|
||||
continue;
|
||||
|
||||
ipv4Addr = addr.toString();
|
||||
break;
|
||||
}
|
||||
|
||||
if (ipv4Addr.isEmpty())
|
||||
return;
|
||||
|
||||
QString uri = "ws://" + ipv4Addr + ":8237";
|
||||
|
||||
con.lblConnStr->setText(uri);
|
||||
con.qrcode->setQrcodeString(uri);
|
||||
|
||||
d.exec();
|
||||
}
|
||||
|
||||
void MainWindow::postToZBoard() {
|
||||
QDialog d(this);
|
||||
Ui_zboard zb;
|
||||
|
@ -1263,7 +1300,7 @@ void MainWindow::setupRecieveTab() {
|
|||
ui->rcvLabel->setText(label);
|
||||
ui->rcvBal->setText(Settings::getZECUSDDisplayFormat(rpc->getAllBalances()->value(addr)));
|
||||
ui->txtRecieve->setPlainText(addr);
|
||||
ui->qrcodeDisplay->setAddress(addr);
|
||||
ui->qrcodeDisplay->setQrcodeString(addr);
|
||||
if (rpc->getUsedAddresses()->value(addr, false)) {
|
||||
ui->lblUsed->setText(tr("Address has been previously used"));
|
||||
} else {
|
||||
|
|
|
@ -92,6 +92,7 @@ private:
|
|||
void addressBook();
|
||||
void payZcashURI();
|
||||
void postToZBoard();
|
||||
void connectApp();
|
||||
void importPrivKey();
|
||||
void exportAllKeys();
|
||||
void exportKeys(QString addr = "");
|
||||
|
|
|
@ -346,8 +346,8 @@
|
|||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>920</width>
|
||||
<height>334</height>
|
||||
<width>928</width>
|
||||
<height>380</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="sendToLayout">
|
||||
|
@ -992,7 +992,7 @@
|
|||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>968</width>
|
||||
<height>22</height>
|
||||
<height>19</height>
|
||||
</rect>
|
||||
</property>
|
||||
<widget class="QMenu" name="menuFile">
|
||||
|
@ -1021,8 +1021,10 @@
|
|||
<property name="title">
|
||||
<string>&Apps</string>
|
||||
</property>
|
||||
<addaction name="actionTurnstile_Migration"/>
|
||||
<addaction name="actionConnect_Mobile_App"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="actionz_board_net"/>
|
||||
<addaction name="actionTurnstile_Migration"/>
|
||||
</widget>
|
||||
<widget class="QMenu" name="menu_Edit">
|
||||
<property name="title">
|
||||
|
@ -1114,9 +1116,19 @@
|
|||
<string>Pay zcash &URI...</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionConnect_Mobile_App">
|
||||
<property name="text">
|
||||
<string>Connect mobile &app</string>
|
||||
</property>
|
||||
</action>
|
||||
</widget>
|
||||
<layoutdefault spacing="6" margin="11"/>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>AddressCombo</class>
|
||||
<extends>QComboBox</extends>
|
||||
<header>addresscombo.h</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>QRCodeLabel</class>
|
||||
<extends>QLabel</extends>
|
||||
|
@ -1127,11 +1139,6 @@
|
|||
<extends>QLabel</extends>
|
||||
<header>fillediconlabel.h</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>AddressCombo</class>
|
||||
<extends>QComboBox</extends>
|
||||
<header>addresscombo.h</header>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<tabstops>
|
||||
<tabstop>tabWidget</tabstop>
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
#include "mobileappconnector.h"
|
||||
#include "ui_mobileappconnector.h"
|
||||
|
||||
MobileAppConnector::MobileAppConnector(QWidget *parent) :
|
||||
QDialog(parent),
|
||||
ui(new Ui::MobileAppConnector)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
}
|
||||
|
||||
MobileAppConnector::~MobileAppConnector()
|
||||
{
|
||||
delete ui;
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
#ifndef MOBILEAPPCONNECTOR_H
|
||||
#define MOBILEAPPCONNECTOR_H
|
||||
|
||||
#include <QDialog>
|
||||
|
||||
namespace Ui {
|
||||
class MobileAppConnector;
|
||||
}
|
||||
|
||||
class MobileAppConnector : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit MobileAppConnector(QWidget *parent = nullptr);
|
||||
~MobileAppConnector();
|
||||
|
||||
private:
|
||||
Ui::MobileAppConnector *ui;
|
||||
};
|
||||
|
||||
#endif // MOBILEAPPCONNECTOR_H
|
|
@ -0,0 +1,146 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>MobileAppConnector</class>
|
||||
<widget class="QDialog" name="MobileAppConnector">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>532</width>
|
||||
<height>400</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Connect Mobile App</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="2" column="2">
|
||||
<widget class="QGroupBox" name="groupBox">
|
||||
<property name="title">
|
||||
<string>ZecQT Wallet Companion App</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="lblConnectedApp">
|
||||
<property name="text">
|
||||
<string>Connected Phone Name and Description</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QPushButton" name="btnDisconnect">
|
||||
<property name="text">
|
||||
<string>Disconnect</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1" colspan="2">
|
||||
<widget class="QDialogButtonBox" name="buttonBox">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="standardButtons">
|
||||
<set>QDialogButtonBox::Close</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0" colspan="2">
|
||||
<widget class="QRCodeLabel" name="qrcode">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">background-color: #fff</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0" colspan="3">
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Scan this QRCode from your ZecQT companion app to connect your phone</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0" colspan="2">
|
||||
<widget class="QLabel" name="lblConnStr">
|
||||
<property name="text">
|
||||
<string>TextLabel</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>QRCodeLabel</class>
|
||||
<extends>QLabel</extends>
|
||||
<header>qrcodelabel.h</header>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources/>
|
||||
<connections>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>accepted()</signal>
|
||||
<receiver>MobileAppConnector</receiver>
|
||||
<slot>accept()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>248</x>
|
||||
<y>254</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>157</x>
|
||||
<y>274</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>rejected()</signal>
|
||||
<receiver>MobileAppConnector</receiver>
|
||||
<slot>reject()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>316</x>
|
||||
<y>260</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>286</x>
|
||||
<y>274</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
</connections>
|
||||
</ui>
|
|
@ -15,7 +15,7 @@ QSize QRCodeLabel::sizeHint() const
|
|||
|
||||
void QRCodeLabel::resizeEvent(QResizeEvent*)
|
||||
{
|
||||
if(!address.isEmpty())
|
||||
if(!str.isEmpty())
|
||||
QLabel::setPixmap(scaledPixmap());
|
||||
}
|
||||
|
||||
|
@ -24,7 +24,7 @@ QPixmap QRCodeLabel::scaledPixmap() const {
|
|||
pm.fill(Qt::white);
|
||||
QPainter painter(&pm);
|
||||
|
||||
qrcodegen::QrCode qr = qrcodegen::QrCode::encodeText(address.toUtf8().constData(), qrcodegen::QrCode::Ecc::LOW);
|
||||
qrcodegen::QrCode qr = qrcodegen::QrCode::encodeText(str.toUtf8().constData(), qrcodegen::QrCode::Ecc::LOW);
|
||||
const int s = qr.getSize()>0?qr.getSize():1;
|
||||
const double w = pm.width();
|
||||
const double h = pm.height();
|
||||
|
@ -51,7 +51,7 @@ QPixmap QRCodeLabel::scaledPixmap() const {
|
|||
return pm;
|
||||
}
|
||||
|
||||
void QRCodeLabel::setAddress(QString addr) {
|
||||
address = addr;
|
||||
void QRCodeLabel::setQrcodeString(QString stra) {
|
||||
str = stra;
|
||||
QLabel::setPixmap(scaledPixmap());
|
||||
}
|
|
@ -10,13 +10,13 @@ public:
|
|||
explicit QRCodeLabel(QWidget *parent = nullptr);
|
||||
virtual QSize sizeHint() const;
|
||||
|
||||
void setAddress(QString address);
|
||||
void setQrcodeString(QString address);
|
||||
QPixmap scaledPixmap() const;
|
||||
public slots:
|
||||
void resizeEvent(QResizeEvent *);
|
||||
|
||||
private:
|
||||
QString address;
|
||||
QString str;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -0,0 +1,102 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>WebSocket Echo Client</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>WebSocket Echo Client</h1>
|
||||
<p>
|
||||
<button onClick="initWebSocket();">Connect</button>
|
||||
<button onClick="stopWebSocket();">Disconnect</button>
|
||||
<button onClick="checkSocket();">State</button>
|
||||
</p>
|
||||
<p>
|
||||
<textarea id="debugTextArea" style="width:400px;height:200px;"></textarea>
|
||||
</p>
|
||||
<p>
|
||||
<input type="text" id="inputText" onkeydown="if(event.keyCode==13)sendMessage();" />
|
||||
<button onClick="sendMessage();">Send</button>
|
||||
</p>
|
||||
|
||||
<script type="text/javascript">
|
||||
var debugTextArea = document.getElementById("debugTextArea");
|
||||
function debug(message) {
|
||||
debugTextArea.value += message + "\n";
|
||||
debugTextArea.scrollTop = debugTextArea.scrollHeight;
|
||||
}
|
||||
|
||||
function sendMessage() {
|
||||
var msg = document.getElementById("inputText").value;
|
||||
if ( websocket != null )
|
||||
{
|
||||
document.getElementById("inputText").value = "";
|
||||
websocket.send( msg );
|
||||
console.log( "string sent :", '"'+msg+'"' );
|
||||
}
|
||||
}
|
||||
|
||||
var wsUri = "ws://localhost:8237";
|
||||
var websocket = null;
|
||||
|
||||
function initWebSocket() {
|
||||
try {
|
||||
if (typeof MozWebSocket == 'function')
|
||||
WebSocket = MozWebSocket;
|
||||
if ( websocket && websocket.readyState == 1 )
|
||||
websocket.close();
|
||||
websocket = new WebSocket( wsUri );
|
||||
websocket.onopen = function (evt) {
|
||||
debug("CONNECTED");
|
||||
};
|
||||
websocket.onclose = function (evt) {
|
||||
debug("DISCONNECTED");
|
||||
};
|
||||
websocket.onmessage = function (evt) {
|
||||
console.log( "Message received :", evt.data );
|
||||
debug( evt.data );
|
||||
};
|
||||
websocket.onerror = function (evt) {
|
||||
debug('ERROR: ' + evt.data);
|
||||
};
|
||||
} catch (exception) {
|
||||
debug('ERROR: ' + exception);
|
||||
}
|
||||
}
|
||||
|
||||
function stopWebSocket() {
|
||||
if (websocket)
|
||||
websocket.close();
|
||||
}
|
||||
|
||||
function checkSocket() {
|
||||
if (websocket != null) {
|
||||
var stateStr;
|
||||
switch (websocket.readyState) {
|
||||
case 0: {
|
||||
stateStr = "CONNECTING";
|
||||
break;
|
||||
}
|
||||
case 1: {
|
||||
stateStr = "OPEN";
|
||||
break;
|
||||
}
|
||||
case 2: {
|
||||
stateStr = "CLOSING";
|
||||
break;
|
||||
}
|
||||
case 3: {
|
||||
stateStr = "CLOSED";
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
stateStr = "UNKNOW";
|
||||
break;
|
||||
}
|
||||
}
|
||||
debug("WebSocket state = " + websocket.readyState + " ( " + stateStr + " )");
|
||||
} else {
|
||||
debug("WebSocket is null");
|
||||
}
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -46,14 +46,15 @@ SOURCES += \
|
|||
src/sendtab.cpp \
|
||||
src/senttxstore.cpp \
|
||||
src/txtablemodel.cpp \
|
||||
src/turnstile.cpp \
|
||||
src/turnstile.cpp \
|
||||
src/qrcodelabel.cpp \
|
||||
src/connection.cpp \
|
||||
src/fillediconlabel.cpp \
|
||||
src/addressbook.cpp \
|
||||
src/logger.cpp \
|
||||
src/addresscombo.cpp \
|
||||
src/websockets.cpp
|
||||
src/websockets.cpp \
|
||||
src/mobileappconnector.cpp
|
||||
|
||||
HEADERS += \
|
||||
src/mainwindow.h \
|
||||
|
@ -67,14 +68,15 @@ HEADERS += \
|
|||
src/settings.h \
|
||||
src/txtablemodel.h \
|
||||
src/senttxstore.h \
|
||||
src/turnstile.h \
|
||||
src/turnstile.h \
|
||||
src/qrcodelabel.h \
|
||||
src/connection.h \
|
||||
src/fillediconlabel.h \
|
||||
src/addressbook.h \
|
||||
src/logger.h \
|
||||
src/addresscombo.h \
|
||||
src/websockets.h
|
||||
src/websockets.h \
|
||||
src/mobileappconnector.h
|
||||
|
||||
FORMS += \
|
||||
src/mainwindow.ui \
|
||||
|
@ -87,7 +89,8 @@ FORMS += \
|
|||
src/memodialog.ui \
|
||||
src/connection.ui \
|
||||
src/zboard.ui \
|
||||
src/addressbook.ui
|
||||
src/addressbook.ui \
|
||||
src/mobileappconnector.ui
|
||||
|
||||
|
||||
TRANSLATIONS = res/zec_qt_wallet_es.ts \
|
||||
|
|
Loading…
Reference in New Issue