Skip to content

Commit abd96c9

Browse files
committed
payment request connected + getNewAddress method on module
1 parent 4b1e126 commit abd96c9

17 files changed

+184
-36
lines changed

pivxd-new-gui.files

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -682,6 +682,7 @@ src/qt/pivx/receivedialog.h
682682
src/qt/pivx/receivewidget.cpp
683683
src/qt/pivx/receivewidget.h
684684
src/qt/pivx/send.cpp
685+
src/qt/pivx/settings/forms/settingsconsolewidget.ui
685686
src/qt/pivx/topbar.cpp
686687
src/qt/pivx/topbar.cpp
687688
src/qt/pivx/topbar.h

pivxd-new-gui.includes

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,4 @@ src/univalue/lib
3131
src/zmq
3232
src/qt/pivx
3333
src/qt/pivx/forms
34+
src/qt/pivx/settings/forms

src/qt/pivx/PIVXGUI.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,7 @@ void PIVXGUI::setClientModel(ClientModel* clientModel) {
225225
// TODO: Complete me..
226226
topBar->setClientModel(clientModel);
227227
sendWidget->setClientModel(clientModel);
228+
settingsWidget->setClientModel(clientModel);
228229

229230
// Receive and report messages from client model
230231
connect(clientModel, SIGNAL(message(QString, QString, unsigned int)), this, SLOT(message(QString, QString, unsigned int)));

src/qt/pivx/forms/send.ui

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,7 @@
297297
<string notr="true">#scrollArea {
298298
background:transparent;
299299
margin-top:10px;
300-
}</string>
300+
}</string>
301301
</property>
302302
<property name="horizontalScrollBarPolicy">
303303
<enum>Qt::ScrollBarAlwaysOff</enum>

src/qt/pivx/qtutils.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,3 +193,9 @@ void setCssEditLine(QLineEdit *edit, bool isValid, bool forceUpdate){
193193
if(forceUpdate)
194194
updateStyle(edit);
195195
}
196+
197+
void setCssEditLineDialog(QLineEdit *edit, bool isValid, bool forceUpdate){
198+
edit->setProperty("cssClass", isValid ? "edit-primary-dialog" : "edit-primary-dialog-error");
199+
if(forceUpdate)
200+
updateStyle(edit);
201+
}

src/qt/pivx/qtutils.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,5 +45,6 @@ bool isLightTheme();
4545
void setTheme(bool isLight);
4646

4747
void setCssEditLine(QLineEdit *edit, bool isValid, bool forceUpdate = false);
48+
void setCssEditLineDialog(QLineEdit *edit, bool isValid, bool forceUpdate = false);
4849

4950
#endif // QTUTILS_H

src/qt/pivx/receivewidget.cpp

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@ ReceiveWidget::ReceiveWidget(PIVXGUI* _window, QWidget *parent) :
144144
connect(window, SIGNAL(themeChanged(bool, QString&)), this, SLOT(changeTheme(bool, QString&)));
145145
connect(ui->pushButtonLabel, SIGNAL(clicked()), this, SLOT(onLabelClicked()));
146146
connect(ui->pushButtonCopy, SIGNAL(clicked()), this, SLOT(onCopyClicked()));
147+
connect(ui->pushButtonNewAddress, SIGNAL(clicked()), this, SLOT(onNewAddressClicked()));
147148
}
148149

149150
void ReceiveWidget::setWalletModel(WalletModel* model){
@@ -157,6 +158,19 @@ void ReceiveWidget::setWalletModel(WalletModel* model){
157158
if(!info) info = new SendCoinsRecipient();
158159
ui->labelAddress->setText(!latestAddress.isEmpty() ? latestAddress : tr("No address"));
159160
updateQr(latestAddress);
161+
162+
updateLabel();
163+
}
164+
}
165+
166+
void ReceiveWidget::updateLabel(){
167+
if(!info->address.isEmpty()) {
168+
// Check if address label exists
169+
QString label = this->addressTableModel->labelForAddress(info->address);
170+
if (!label.isEmpty()) {
171+
// TODO: Show label.. complete me..
172+
ui->pushButtonLabel->setText(tr("Change Label"));
173+
}
160174
}
161175
}
162176

@@ -191,6 +205,7 @@ void ReceiveWidget::onLabelClicked(){
191205
) {
192206
// Show snackbar
193207
// update label status (icon color)
208+
updateLabel();
194209
window->messageInfo(tr("Address label saved"));
195210
} else {
196211
// Show snackbar error
@@ -200,16 +215,27 @@ void ReceiveWidget::onLabelClicked(){
200215
}
201216
}
202217

218+
void ReceiveWidget::onNewAddressClicked(){
219+
CBitcoinAddress address = walletModel->getNewAddress("");
220+
updateQr(QString::fromStdString(address.ToString()));
221+
ui->labelAddress->setText(!info->address.isEmpty() ? info->address : tr("No address"));
222+
updateLabel();
223+
window->messageInfo(tr("New address created"));
224+
}
225+
203226
void ReceiveWidget::onCopyClicked(){
204227
GUIUtil::setClipboard(info->address);
205228
window->messageInfo(tr("Address copied"));
206229
}
207230

208231

209232
void ReceiveWidget::onRequestClicked(){
210-
window->showHide(true);
211-
RequestDialog* dialog = new RequestDialog(window);
212-
openDialogWithOpaqueBackgroundY(dialog, window, 3.5, 12);
233+
if(walletModel) {
234+
window->showHide(true);
235+
RequestDialog *dialog = new RequestDialog(window);
236+
dialog->setWalletModel(walletModel);
237+
openDialogWithOpaqueBackgroundY(dialog, window, 3.5, 12);
238+
}
213239
}
214240

215241
void ReceiveWidget::onMyAddressesClicked(){

src/qt/pivx/receivewidget.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ class ReceiveWidget : public QWidget
3333
public slots:
3434
void onRequestClicked();
3535
void onMyAddressesClicked();
36+
void onNewAddressClicked();
3637

3738
private slots:
3839
void changeTheme(bool isLightTheme, QString &theme);
@@ -48,12 +49,13 @@ private slots:
4849

4950
QSpacerItem *spacer = nullptr;
5051

51-
// Cached last address, todo: use a pointer here..
52+
// Cached last address
5253
SendCoinsRecipient *info = nullptr;
5354
// Cached qr
5455
QPixmap *qrImage = nullptr;
5556

5657
void updateQr(QString address);
58+
void updateLabel();
5759

5860
};
5961

src/qt/pivx/requestdialog.cpp

Lines changed: 72 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,11 @@
33
#include "QGraphicsDropShadowEffect"
44
#include "QListView"
55

6+
#include "qt/pivx/qtutils.h"
7+
#include "guiutil.h"
8+
#include "amount.h"
9+
#include "optionsmodel.h"
10+
611
RequestDialog::RequestDialog(QWidget *parent) :
712
QDialog(parent),
813
ui(new Ui::RequestDialog)
@@ -30,18 +35,6 @@ RequestDialog::RequestDialog(QWidget *parent) :
3035
shadowEffect->setYOffset(3);
3136
shadowEffect->setBlurRadius(6);
3237

33-
QGraphicsDropShadowEffect* shadowEffect2 = new QGraphicsDropShadowEffect();
34-
shadowEffect2->setColor(QColor(0, 0, 0, 22));
35-
shadowEffect2->setXOffset(0);
36-
shadowEffect2->setYOffset(3);
37-
shadowEffect2->setBlurRadius(6);
38-
39-
QGraphicsDropShadowEffect* shadowEffect3 = new QGraphicsDropShadowEffect();
40-
shadowEffect3->setColor(QColor(0, 0, 0, 22));
41-
shadowEffect3->setXOffset(0);
42-
shadowEffect3->setYOffset(3);
43-
shadowEffect3->setBlurRadius(6);
44-
4538
// Combo Coins
4639

4740
ui->comboBoxCoin->setProperty("cssClass", "btn-combo-coins");
@@ -60,7 +53,8 @@ RequestDialog::RequestDialog(QWidget *parent) :
6053
ui->labelSubtitleLabel->setProperty("cssClass", "text-title2-dialog");
6154

6255
ui->lineEditLabel->setPlaceholderText("Enter a label to be saved withing the address");
63-
ui->lineEditLabel->setProperty("cssClass", "edit-primary-dialog");
56+
setCssEditLineDialog(ui->lineEditLabel, true);
57+
6458
ui->lineEditLabel->setAttribute(Qt::WA_MacShowFocusRect, 0);
6559
ui->lineEditLabel->setGraphicsEffect(shadowEffect);
6660

@@ -70,9 +64,9 @@ RequestDialog::RequestDialog(QWidget *parent) :
7064
ui->labelSubtitleAmount->setProperty("cssClass", "text-title2-dialog");
7165

7266
ui->lineEditAmount->setPlaceholderText("0.00");
73-
ui->lineEditAmount->setProperty("cssClass", "edit-primary-dialog");
67+
setCssEditLineDialog(ui->lineEditAmount, true);
7468
ui->lineEditAmount->setAttribute(Qt::WA_MacShowFocusRect, 0);
75-
ui->layoutAmount->setGraphicsEffect(shadowEffect2);
69+
ui->layoutAmount->setGraphicsEffect(shadowEffect);
7670

7771

7872
// Description
@@ -81,9 +75,9 @@ RequestDialog::RequestDialog(QWidget *parent) :
8175
ui->labelSubtitleDescription->setProperty("cssClass", "text-title2-dialog");
8276

8377
ui->lineEditDescription->setPlaceholderText("Add descripcion ");
84-
ui->lineEditDescription->setProperty("cssClass", "edit-primary-dialog");
78+
setCssEditLineDialog(ui->lineEditDescription, true);
8579
ui->lineEditDescription->setAttribute(Qt::WA_MacShowFocusRect, 0);
86-
ui->lineEditDescription->setGraphicsEffect(shadowEffect3);
80+
ui->lineEditDescription->setGraphicsEffect(shadowEffect);
8781

8882

8983
// Stack
@@ -122,14 +116,71 @@ RequestDialog::RequestDialog(QWidget *parent) :
122116
connect(ui->btnCancel, SIGNAL(clicked()), this, SLOT(close()));
123117
connect(ui->btnEsc, SIGNAL(clicked()), this, SLOT(close()));
124118
connect(ui->btnSave, SIGNAL(clicked()), this, SLOT(onNextClicked()));
119+
120+
// TODO: Change copy address for save image (the method is already implemented in other class called exportQr or something like that)
121+
connect(ui->btnCopyAddress, SIGNAL(clicked()), this, SLOT(onCopyClicked()));
122+
}
123+
124+
void RequestDialog::setWalletModel(WalletModel *model){
125+
this->walletModel = model;
125126
}
126127

127128

128129
void RequestDialog::onNextClicked(){
129-
pos = 1;
130-
ui->stack->setCurrentIndex(pos);
131-
ui->labelTitle->setText("Request for 200 PIV");
132-
ui->buttonsStack->setVisible(false);
130+
131+
if(walletModel) {
132+
// info
133+
info = new SendCoinsRecipient();
134+
135+
136+
info->label = ui->lineEditLabel->text();
137+
info->message = ui->lineEditDescription->text();
138+
info->address = QString::fromStdString(walletModel->getNewAddress().ToString());
139+
int displayUnit = walletModel->getOptionsModel()->getDisplayUnit();
140+
bool isValueValid = true;
141+
CAmount value = GUIUtil::parseValue(
142+
ui->lineEditAmount->text(),
143+
displayUnit,
144+
&isValueValid
145+
);
146+
info->amount = value;
147+
148+
if(value <= 0 || !isValueValid){
149+
// TODO: Notify problem..
150+
return;
151+
}
152+
// TODO: validate address etc etc.
153+
154+
// TODO: Complete amount and QR.
155+
156+
ui->labelTitle->setText("Request for " + BitcoinUnits::format(displayUnit, value, false, BitcoinUnits::separatorAlways));
157+
updateQr(info->address);
158+
ui->buttonsStack->setVisible(false);
159+
pos = 1;
160+
ui->stack->setCurrentIndex(pos);
161+
}
162+
}
163+
164+
void RequestDialog::onCopyClicked(){
165+
if(info) {
166+
GUIUtil::setClipboard(GUIUtil::formatBitcoinURI(*info));
167+
// TODO: Notify
168+
//window->messageInfo(tr("Address copied"));
169+
close();
170+
}
171+
}
172+
173+
void RequestDialog::updateQr(QString str){
174+
QString uri = GUIUtil::formatBitcoinURI(*info);
175+
ui->labelQrImg->setText("");
176+
QString error;
177+
QPixmap pixmap = encodeToQr(uri, error);
178+
if(!pixmap.isNull()){
179+
qrImage = &pixmap;
180+
ui->labelQrImg->setPixmap(qrImage->scaled(ui->labelQrImg->width(), ui->labelQrImg->height()));
181+
}else{
182+
ui->labelQrImg->setText(!error.isEmpty() ? error : "Error encoding address");
183+
}
133184
}
134185

135186
RequestDialog::~RequestDialog()

src/qt/pivx/requestdialog.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22
#define REQUESTDIALOG_H
33

44
#include <QDialog>
5+
#include <QPixmap>
6+
#include "walletmodel.h"
7+
8+
class WalletModel;
59

610
namespace Ui {
711
class RequestDialog;
@@ -15,12 +19,22 @@ class RequestDialog : public QDialog
1519
explicit RequestDialog(QWidget *parent = nullptr);
1620
~RequestDialog();
1721

22+
void setWalletModel(WalletModel *model);
23+
1824
private slots:
1925
void onNextClicked();
26+
void onCopyClicked();
2027

2128
private:
2229
Ui::RequestDialog *ui;
2330
int pos = 0;
31+
WalletModel *walletModel;
32+
// Cached last address
33+
SendCoinsRecipient *info = nullptr;
34+
35+
QPixmap *qrImage = nullptr;
36+
37+
void updateQr(QString str);
2438
};
2539

2640
#endif // REQUESTDIALOG_H

0 commit comments

Comments
 (0)