diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 1835cfb..ee89315 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -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 { diff --git a/src/mainwindow.h b/src/mainwindow.h index 2bc39bc..3a823ae 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -92,6 +92,7 @@ private: void addressBook(); void payZcashURI(); void postToZBoard(); + void connectApp(); void importPrivKey(); void exportAllKeys(); void exportKeys(QString addr = ""); diff --git a/src/mainwindow.ui b/src/mainwindow.ui index 7e758d1..5df7c20 100644 --- a/src/mainwindow.ui +++ b/src/mainwindow.ui @@ -346,8 +346,8 @@ 0 0 - 920 - 334 + 928 + 380 @@ -992,7 +992,7 @@ 0 0 968 - 22 + 19 @@ -1021,8 +1021,10 @@ &Apps - + + + @@ -1114,9 +1116,19 @@ Pay zcash &URI... + + + Connect mobile &app + + + + AddressCombo + QComboBox +
addresscombo.h
+
QRCodeLabel QLabel @@ -1127,11 +1139,6 @@ QLabel
fillediconlabel.h
- - AddressCombo - QComboBox -
addresscombo.h
-
tabWidget diff --git a/src/mobileappconnector.cpp b/src/mobileappconnector.cpp new file mode 100644 index 0000000..67f4486 --- /dev/null +++ b/src/mobileappconnector.cpp @@ -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; +} diff --git a/src/mobileappconnector.h b/src/mobileappconnector.h new file mode 100644 index 0000000..e740ae9 --- /dev/null +++ b/src/mobileappconnector.h @@ -0,0 +1,22 @@ +#ifndef MOBILEAPPCONNECTOR_H +#define MOBILEAPPCONNECTOR_H + +#include + +namespace Ui { +class MobileAppConnector; +} + +class MobileAppConnector : public QDialog +{ + Q_OBJECT + +public: + explicit MobileAppConnector(QWidget *parent = nullptr); + ~MobileAppConnector(); + +private: + Ui::MobileAppConnector *ui; +}; + +#endif // MOBILEAPPCONNECTOR_H diff --git a/src/mobileappconnector.ui b/src/mobileappconnector.ui new file mode 100644 index 0000000..07198bf --- /dev/null +++ b/src/mobileappconnector.ui @@ -0,0 +1,146 @@ + + + MobileAppConnector + + + + 0 + 0 + 532 + 400 + + + + Connect Mobile App + + + + + + ZecQT Wallet Companion App + + + + + + Connected Phone Name and Description + + + + + + + Disconnect + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Close + + + + + + + + 0 + 0 + + + + background-color: #fff + + + + + + + + + + + 0 + 0 + + + + Scan this QRCode from your ZecQT companion app to connect your phone + + + + + + + TextLabel + + + Qt::AlignCenter + + + + + + + + QRCodeLabel + QLabel +
qrcodelabel.h
+
+
+ + + + buttonBox + accepted() + MobileAppConnector + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + MobileAppConnector + reject() + + + 316 + 260 + + + 286 + 274 + + + + +
diff --git a/src/qrcodelabel.cpp b/src/qrcodelabel.cpp index 1227d69..97f34c0 100644 --- a/src/qrcodelabel.cpp +++ b/src/qrcodelabel.cpp @@ -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()); } \ No newline at end of file diff --git a/src/qrcodelabel.h b/src/qrcodelabel.h index 9bf3abd..461b238 100644 --- a/src/qrcodelabel.h +++ b/src/qrcodelabel.h @@ -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; }; diff --git a/wsclient.html b/wsclient.html new file mode 100644 index 0000000..f9d33af --- /dev/null +++ b/wsclient.html @@ -0,0 +1,102 @@ + + + WebSocket Echo Client + + +

WebSocket Echo Client

+

+ + + +

+

+ +

+

+ + +

+ + + + \ No newline at end of file diff --git a/zec-qt-wallet.pro b/zec-qt-wallet.pro index 5987d44..9f2eaa0 100644 --- a/zec-qt-wallet.pro +++ b/zec-qt-wallet.pro @@ -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 \