forked from hush/SilentDragonLite
Aditya Kulkarni
5 years ago
17 changed files with 580 additions and 33 deletions
@ -0,0 +1,122 @@ |
|||
#include "firsttimewizard.h" |
|||
|
|||
#include "ui_newseed.h" |
|||
#include "ui_restoreseed.h" |
|||
#include "ui_newwallet.h" |
|||
|
|||
#include "../lib/zecwalletlitelib.h" |
|||
|
|||
using json = nlohmann::json; |
|||
|
|||
FirstTimeWizard::FirstTimeWizard(bool dangerous, QString server) |
|||
{ |
|||
setWindowTitle("New wallet wizard"); |
|||
this->dangerous = dangerous; |
|||
this->server = server; |
|||
|
|||
// Create the pages
|
|||
setPage(Page_NewOrRestore, new NewOrRestorePage(this)); |
|||
setPage(Page_New, new NewSeedPage(this)); |
|||
setPage(Page_Restore,new RestoreSeedPage(this)); |
|||
} |
|||
|
|||
int FirstTimeWizard::nextId() const { |
|||
switch (currentId()) { |
|||
case Page_NewOrRestore: |
|||
if (field("intro.new").toBool()) { |
|||
return Page_New; |
|||
} else { |
|||
return Page_Restore; |
|||
} |
|||
case Page_New: |
|||
case Page_Restore: |
|||
default: |
|||
return -1; |
|||
} |
|||
} |
|||
|
|||
NewOrRestorePage::NewOrRestorePage(FirstTimeWizard *parent) : QWizardPage(parent) { |
|||
setTitle("Create or Restore wallet."); |
|||
|
|||
QWidget* pageWidget = new QWidget(); |
|||
Ui_CreateWalletForm form; |
|||
form.setupUi(pageWidget); |
|||
|
|||
// Exclusive buttons
|
|||
QObject::connect(form.radioNewWallet, &QRadioButton::clicked, [=](bool checked) { |
|||
if (checked) { |
|||
form.radioRestoreWallet->setChecked(false); |
|||
} |
|||
}); |
|||
|
|||
QObject::connect(form.radioRestoreWallet, &QRadioButton::clicked, [=](bool checked) { |
|||
if (checked) { |
|||
form.radioNewWallet->setChecked(false); |
|||
} |
|||
}); |
|||
form.radioNewWallet->setChecked(true); |
|||
|
|||
registerField("intro.new", form.radioNewWallet); |
|||
|
|||
QVBoxLayout *layout = new QVBoxLayout; |
|||
layout->addWidget(pageWidget); |
|||
setLayout(layout); |
|||
setCommitPage(true); |
|||
setButtonText(QWizard::CommitButton, "Next"); |
|||
} |
|||
|
|||
NewSeedPage::NewSeedPage(FirstTimeWizard *parent) : QWizardPage(parent) { |
|||
setTitle("Your new wallet"); |
|||
|
|||
QWidget* pageWidget = new QWidget(); |
|||
Ui_NewSeedForm form; |
|||
form.setupUi(pageWidget); |
|||
|
|||
QVBoxLayout *layout = new QVBoxLayout; |
|||
layout->addWidget(pageWidget); |
|||
|
|||
setLayout(layout); |
|||
|
|||
// Call the library to create a new wallet.
|
|||
char* resp = litelib_initialize_new(parent->dangerous, parent->server.toStdString().c_str()); |
|||
QString reply = litelib_process_response(resp); |
|||
|
|||
auto parsed = json::parse(reply.toStdString().c_str(), nullptr, false); |
|||
if (parsed.is_discarded() || parsed.is_null() || parsed.find("seed") == parsed.end()) { |
|||
form.txtSeed->setPlainText(tr("Error creating a wallet") + "\n" + reply); |
|||
} else { |
|||
QString seed = QString::fromStdString(parsed["seed"].get<json::string_t>()); |
|||
form.txtSeed->setPlainText(seed); |
|||
} |
|||
} |
|||
|
|||
// Will be called just before closing. Make sure we can save the seed in the wallet
|
|||
// before we allow the page to be closed
|
|||
bool NewSeedPage::validatePage() { |
|||
char* resp = litelib_execute("save", ""); |
|||
QString reply = litelib_process_response(resp); |
|||
|
|||
auto parsed = json::parse(reply.toStdString().c_str(), nullptr, false); |
|||
if (parsed.is_discarded() || parsed.is_null() || parsed.find("result") == parsed.end()) { |
|||
QMessageBox::warning(this, tr("Failed to save wallet"), |
|||
tr("Couldn't save the wallet. Error") + "\n" + reply, |
|||
QMessageBox::Ok); |
|||
return false; |
|||
} else { |
|||
return true; |
|||
} |
|||
} |
|||
|
|||
|
|||
RestoreSeedPage::RestoreSeedPage(FirstTimeWizard *parent) : QWizardPage(parent) { |
|||
setTitle("Restore wallet from seed"); |
|||
|
|||
QWidget* pageWidget = new QWidget(); |
|||
Ui_RestoreSeedForm form; |
|||
form.setupUi(pageWidget); |
|||
|
|||
QVBoxLayout *layout = new QVBoxLayout; |
|||
layout->addWidget(pageWidget); |
|||
|
|||
setLayout(layout); |
|||
} |
@ -0,0 +1,50 @@ |
|||
#ifndef FIRSTTIMEWIZARD_H |
|||
#define FIRSTTIMEWIZARD_H |
|||
|
|||
#include "precompiled.h" |
|||
|
|||
class FirstTimeWizard: public QWizard |
|||
{ |
|||
public: |
|||
FirstTimeWizard(bool dangerous, QString server); |
|||
|
|||
protected: |
|||
int nextId() const; |
|||
|
|||
private: |
|||
enum { |
|||
Page_NewOrRestore, |
|||
Page_New, |
|||
Page_Restore |
|||
}; |
|||
|
|||
bool dangerous; |
|||
QString server; |
|||
|
|||
friend class NewOrRestorePage; |
|||
friend class NewSeedPage; |
|||
friend class RestoreSeedPage; |
|||
}; |
|||
|
|||
class NewOrRestorePage: public QWizardPage { |
|||
public: |
|||
NewOrRestorePage(FirstTimeWizard* parent); |
|||
}; |
|||
|
|||
|
|||
class NewSeedPage: public QWizardPage { |
|||
public: |
|||
NewSeedPage(FirstTimeWizard* parent); |
|||
protected: |
|||
bool validatePage(); |
|||
}; |
|||
|
|||
|
|||
class RestoreSeedPage: public QWizardPage { |
|||
public: |
|||
RestoreSeedPage(FirstTimeWizard* parent); |
|||
}; |
|||
|
|||
|
|||
|
|||
#endif // FIRSTTIMEWIZARD_H
|
@ -0,0 +1,63 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<ui version="4.0"> |
|||
<class>NewSeedForm</class> |
|||
<widget class="QWidget" name="NewSeedForm"> |
|||
<property name="geometry"> |
|||
<rect> |
|||
<x>0</x> |
|||
<y>0</y> |
|||
<width>400</width> |
|||
<height>300</height> |
|||
</rect> |
|||
</property> |
|||
<property name="windowTitle"> |
|||
<string>Form</string> |
|||
</property> |
|||
<layout class="QGridLayout" name="gridLayout"> |
|||
<item row="0" column="0"> |
|||
<widget class="QLabel" name="label"> |
|||
<property name="text"> |
|||
<string>This is your new wallet's seed phrase. PLEASE BACK IT UP SECURELY.</string> |
|||
</property> |
|||
<property name="wordWrap"> |
|||
<bool>true</bool> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="1" column="0"> |
|||
<widget class="QLabel" name="label_2"> |
|||
<property name="text"> |
|||
<string>The seed phrase is the only way to restore the wallet. If you forget the seed phrase, THERE IS NO WAY TO RESTORE YOUR WALLET AND THE FUNDS in it</string> |
|||
</property> |
|||
<property name="wordWrap"> |
|||
<bool>true</bool> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="2" column="0"> |
|||
<widget class="QGroupBox" name="groupBox"> |
|||
<property name="sizePolicy"> |
|||
<sizepolicy hsizetype="Preferred" vsizetype="Expanding"> |
|||
<horstretch>0</horstretch> |
|||
<verstretch>0</verstretch> |
|||
</sizepolicy> |
|||
</property> |
|||
<property name="title"> |
|||
<string/> |
|||
</property> |
|||
<layout class="QVBoxLayout" name="verticalLayout"> |
|||
<item> |
|||
<widget class="QPlainTextEdit" name="txtSeed"> |
|||
<property name="readOnly"> |
|||
<bool>true</bool> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
</layout> |
|||
</widget> |
|||
</item> |
|||
</layout> |
|||
</widget> |
|||
<resources/> |
|||
<connections/> |
|||
</ui> |
@ -0,0 +1,85 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<ui version="4.0"> |
|||
<class>CreateWalletForm</class> |
|||
<widget class="QWidget" name="CreateWalletForm"> |
|||
<property name="geometry"> |
|||
<rect> |
|||
<x>0</x> |
|||
<y>0</y> |
|||
<width>400</width> |
|||
<height>300</height> |
|||
</rect> |
|||
</property> |
|||
<property name="windowTitle"> |
|||
<string>Form</string> |
|||
</property> |
|||
<layout class="QGridLayout" name="gridLayout"> |
|||
<item row="1" column="0"> |
|||
<widget class="QGroupBox" name="groupBox_2"> |
|||
<property name="sizePolicy"> |
|||
<sizepolicy hsizetype="Preferred" vsizetype="Expanding"> |
|||
<horstretch>0</horstretch> |
|||
<verstretch>0</verstretch> |
|||
</sizepolicy> |
|||
</property> |
|||
<property name="title"> |
|||
<string/> |
|||
</property> |
|||
<layout class="QGridLayout" name="gridLayout_3"> |
|||
<item row="0" column="0"> |
|||
<widget class="QRadioButton" name="radioRestoreWallet"> |
|||
<property name="text"> |
|||
<string>Restore wallet from seed</string> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="1" column="0"> |
|||
<widget class="QLabel" name="label_3"> |
|||
<property name="text"> |
|||
<string>Restore an existing wallet, using the 24-word seed. </string> |
|||
</property> |
|||
<property name="wordWrap"> |
|||
<bool>true</bool> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
</layout> |
|||
</widget> |
|||
</item> |
|||
<item row="0" column="0"> |
|||
<widget class="QGroupBox" name="groupBox"> |
|||
<property name="sizePolicy"> |
|||
<sizepolicy hsizetype="Preferred" vsizetype="Expanding"> |
|||
<horstretch>0</horstretch> |
|||
<verstretch>0</verstretch> |
|||
</sizepolicy> |
|||
</property> |
|||
<property name="title"> |
|||
<string/> |
|||
</property> |
|||
<layout class="QGridLayout" name="gridLayout_2"> |
|||
<item row="0" column="0"> |
|||
<widget class="QRadioButton" name="radioNewWallet"> |
|||
<property name="text"> |
|||
<string>Create a new Wallet</string> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="1" column="0"> |
|||
<widget class="QLabel" name="label_2"> |
|||
<property name="text"> |
|||
<string>Create a new wallet with a randomly generated seed.</string> |
|||
</property> |
|||
<property name="wordWrap"> |
|||
<bool>true</bool> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
</layout> |
|||
</widget> |
|||
</item> |
|||
</layout> |
|||
</widget> |
|||
<resources/> |
|||
<connections/> |
|||
</ui> |
@ -0,0 +1,53 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<ui version="4.0"> |
|||
<class>RestoreSeedForm</class> |
|||
<widget class="QWidget" name="RestoreSeedForm"> |
|||
<property name="geometry"> |
|||
<rect> |
|||
<x>0</x> |
|||
<y>0</y> |
|||
<width>400</width> |
|||
<height>300</height> |
|||
</rect> |
|||
</property> |
|||
<property name="windowTitle"> |
|||
<string>Form</string> |
|||
</property> |
|||
<layout class="QGridLayout" name="gridLayout"> |
|||
<item row="0" column="0"> |
|||
<widget class="QLabel" name="label"> |
|||
<property name="text"> |
|||
<string>Please enter your 24-word seed below</string> |
|||
</property> |
|||
<property name="wordWrap"> |
|||
<bool>true</bool> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
<item row="1" column="0"> |
|||
<widget class="QGroupBox" name="groupBox"> |
|||
<property name="sizePolicy"> |
|||
<sizepolicy hsizetype="Preferred" vsizetype="Expanding"> |
|||
<horstretch>0</horstretch> |
|||
<verstretch>0</verstretch> |
|||
</sizepolicy> |
|||
</property> |
|||
<property name="title"> |
|||
<string/> |
|||
</property> |
|||
<layout class="QVBoxLayout" name="verticalLayout"> |
|||
<item> |
|||
<widget class="QPlainTextEdit" name="txtSeed"> |
|||
<property name="readOnly"> |
|||
<bool>false</bool> |
|||
</property> |
|||
</widget> |
|||
</item> |
|||
</layout> |
|||
</widget> |
|||
</item> |
|||
</layout> |
|||
</widget> |
|||
<resources/> |
|||
<connections/> |
|||
</ui> |
Loading…
Reference in new issue