Browse Source

Auto detect testnet and mainnet ports

import_zecw
Aditya Kulkarni 6 years ago
parent
commit
402b80d289
  1. 2
      src/main.cpp
  2. 50
      src/mainwindow.cpp
  3. 3
      src/mainwindow.h
  4. 29
      src/mainwindow.ui
  5. 1
      src/precompiled.h
  6. 27
      src/rpc.cpp
  7. 27
      src/scripts/mkrelease.sh
  8. 2
      src/scripts/mkwinrelease.ps1
  9. 1
      src/sendtab.cpp
  10. 92
      src/settings.cpp
  11. 10
      src/settings.h
  12. 34
      src/settings.ui
  13. 20
      src/ui_mainwindow.h
  14. 34
      src/ui_settings.h

2
src/main.cpp

@ -1,4 +1,5 @@
#include "mainwindow.h"
#include "settings.h"
#include "precompiled.h"
int main(int argc, char *argv[])
@ -19,6 +20,7 @@ int main(int argc, char *argv[])
QCoreApplication::setOrganizationDomain("adityapk.com");
QCoreApplication::setApplicationName("zcash-qt-wallet");
Settings::init();
MainWindow w;
w.setWindowTitle("zcash-qt-wallet v" + QString(APP_VERSION));

50
src/mainwindow.cpp

@ -17,9 +17,6 @@ MainWindow::MainWindow(QWidget *parent) :
{
ui->setupUi(this);
// Load settings
settings = new Settings();
// Status Bar
loadingLabel = new QLabel();
loadingMovie = new QMovie(":/icons/res/loading.gif");
@ -47,23 +44,22 @@ MainWindow::MainWindow(QWidget *parent) :
settings.port->setValidator(&validator);
// Load previous values into the dialog
settings.hostname ->setText(this->getSettings()->getHost());
settings.port ->setText(this->getSettings()->getPort());
settings.rpcuser ->setText(this->getSettings()->getUsernamePassword().split(":")[0]);
settings.rpcpassword->setText(this->getSettings()->getUsernamePassword().split(":")[1]);
settings.hostname ->setText(Settings::getInstance()->getHost());
settings.port ->setText(Settings::getInstance()->getPort());
settings.rpcuser ->setText(Settings::getInstance()->getUsernamePassword().split(":")[0]);
settings.rpcpassword->setText(Settings::getInstance()->getUsernamePassword().split(":")[1]);
if (settingsDialog.exec() == QDialog::Accepted) {
// Save settings
QSettings s;
s.setValue("connection/host", settings.hostname->text());
s.setValue("connection/port", settings.port->text());
s.setValue("connection/rpcuser", settings.rpcuser->text());
s.setValue("connection/rpcpassword", settings.rpcpassword->text());
s.setValue("connection/host", settings.hostname->text());
s.setValue("connection/port", settings.port->text());
s.setValue("connection/rpcuser", settings.rpcuser->text());
s.setValue("connection/rpcpassword", settings.rpcpassword->text());
s.sync();
// Then refresh everything
this->getSettings()->refresh();
// Then refresh everything.
this->rpc->reloadConnectionInfo();
this->rpc->refresh();
};
@ -75,6 +71,8 @@ MainWindow::MainWindow(QWidget *parent) :
// Set up donate action
QObject::connect(ui->actionDonate, &QAction::triggered, this, &MainWindow::donate);
QObject::connect(ui->actionImport_Private_Keys, &QAction::triggered, this, &MainWindow::importPrivKeys);
// Set up about action
QObject::connect(ui->actionAbout, &QAction::triggered, [=] () {
QDialog aboutDialog(this);
@ -111,6 +109,28 @@ void MainWindow::donate() {
ui->tabWidget->setCurrentIndex(1);
}
void MainWindow::importPrivKeys() {
bool ok;
QString text = QInputDialog::getMultiLineText(
this, "Import Private Keys",
QString() +
"Please paste your private keys (zAddr or tAddr) here, one per line.\n" +
"The keys will be imported into your connected zcashd node",
"", &ok);
if (ok && !text.isEmpty()) {
auto keys = text.split("\n");
for (int i=0; i < keys.length(); i++) {
auto key = keys[i].trimmed();
if (key.startsWith("S") ||
key.startsWith("secret")) { // Z key
} else { // T Key
}
}
}
}
void MainWindow::setupBalancesTab() {
ui->unconfirmedWarning->setVisible(false);
@ -292,10 +312,6 @@ void MainWindow::setupRecieveTab() {
}
Settings* MainWindow::getSettings() {
return settings;
}
MainWindow::~MainWindow()
{
delete ui;

3
src/mainwindow.h

@ -19,8 +19,6 @@ public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
Settings* getSettings();
Ui::MainWindow* ui;
QLabel* statusLabel;
@ -45,6 +43,7 @@ private:
QString doSendTxValidations(QString fromAddr, QList<QPair<QString, double>> toAddrs);
void donate();
void importPrivKeys();
RPC* rpc;
Settings* settings;

29
src/mainwindow.ui

@ -222,11 +222,33 @@
</item>
<item>
<widget class="QLineEdit" name="sendAddressBalance">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_6">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
@ -622,6 +644,8 @@
<property name="title">
<string>File</string>
</property>
<addaction name="actionImport_Private_Keys"/>
<addaction name="separator"/>
<addaction name="actionSettings"/>
<addaction name="separator"/>
<addaction name="actionExit"/>
@ -657,6 +681,11 @@
<string>Donate</string>
</property>
</action>
<action name="actionImport_Private_Keys">
<property name="text">
<string>Import Private Keys</string>
</property>
</action>
</widget>
<layoutdefault spacing="6" margin="11"/>
<tabstops>

1
src/precompiled.h

@ -26,6 +26,7 @@
#include <QPushButton>
#include <QLabel>
#include <QDialog>
#include <QInputDialog>
#include <QDebug>
#include <QUrl>
#include <QtNetwork/QNetworkRequest>

27
src/rpc.cpp

@ -60,13 +60,13 @@ void RPC::reloadConnectionInfo() {
QUrl myurl;
myurl.setScheme("http"); //https also applicable
myurl.setHost(main->getSettings()->getHost());
myurl.setPort(main->getSettings()->getPort().toInt());
myurl.setHost(Settings::getInstance()->getHost());
myurl.setPort(Settings::getInstance()->getPort().toInt());
request.setUrl(myurl);
request.setHeader(QNetworkRequest::ContentTypeHeader, "text/plain");
QString headerData = "Basic " + main->getSettings()->getUsernamePassword().toLocal8Bit().toBase64();
QString headerData = "Basic " + Settings::getInstance()->getUsernamePassword().toLocal8Bit().toBase64();
request.setRawHeader("Authorization", headerData.toLocal8Bit());
}
@ -385,6 +385,22 @@ void RPC::refreshBalances() {
void RPC::refreshTransactions() {
auto txdata = new QList<TransactionItem>();
/*
auto getZReceivedTransactions = ([=] (const json& reply) {
for (auto& it : reply.get<json::array_t>()) {
TransactionItem tx(
QString("receive"),
QDateTime::fromSecsSinceEpoch(it["time"].get<json::number_unsigned_t>()).toLocalTime().toString(),
(it["address"].is_null() ? "" : QString::fromStdString(it["address"])),
QString::fromStdString(it["txid"]),
it["amount"].get<json::number_float_t>(),
it["confirmations"].get<json::number_float_t>()
);
txdata->push_front(tx);
}
});
*/
getTransactions([=] (json reply) {
for (auto& it : reply.get<json::array_t>()) {
@ -426,7 +442,10 @@ void RPC::refreshTxStatus(const QString& newOpid) {
// And if it ended up successful
QString status = QString::fromStdString(it["status"]);
if (status == "success") {
main->ui->statusBar->showMessage(" Tx " % id % " computed successfully and submitted");
auto txid = QString::fromStdString(it["result"]["txid"]);
qDebug() << "Tx complete. txid " << txid;
QGuiApplication::clipboard()->setText(txid);
main->ui->statusBar->showMessage("Tx completed! Txid copied to clipboard (" + txid + ")");
main->loadingLabel->setVisible(false);
watchingOps.remove(id);

27
src/scripts/mkrelease.sh

@ -4,36 +4,43 @@ if [ -z $QT_STATIC ]; then echo "QT_STATIC is not set"; exit 1; fi
if [ -z $APP_VERSION ]; then echo "APP_VERSION is not set"; exit 1; fi
if [ -z $PREV_VERSION ]; then echo "PREV_VERSION is not set"; exit 1; fi
echo "Updating version numbers"
echo -n "Version files."
# Replace the version number in the .pro file so it gets picked up everywhere
sed -i "s/${PREV_VERSION}/${APP_VERSION}/g" zcash-qt-wallet.pro > /dev/null
# Also update it in the README.md
sed -i "s/${PREV_VERSION}/${APP_VERSION}/g" README.md > /dev/null
echo "[OK]"
echo "Configuring"
echo -n "Configuring..."
make distclean > /dev/null
$QT_STATIC/bin/qmake zcash-qt-wallet.pro -spec linux-clang CONFIG+=release > /dev/null
echo "[OK]"
echo "Building"
echo -n "Building......"
rm -rf bin/zcash-qt-wallet* > /dev/null
make -j$(nproc) > /dev/null
echo "[OK]"
# Test for Qt
echo "Testing for no Qt"
# Test for Qt
echo -n "Static link..."
if [[ $(ldd zcash-qt-wallet | grep -i "Qt") ]]; then
echo "FOUND QT; ABORT";
exit 1
else
echo "No Qt found"
fi
echo "[OK]"
echo "Packaging"
echo -n "Packaging....."
mkdir bin/zcash-qt-wallet-v$APP_VERSION > /dev/null
cp zcash-qt-wallet bin/zcash-qt-wallet-v$APP_VERSION > /dev/null
cp README.md bin/zcash-qt-wallet-v$APP_VERSION > /dev/null
cp LICENSE bin/zcash-qt-wallet-v$APP_VERSION > /dev/null
cd bin && tar cvf zcash-qt-wallet-v$APP_VERSION.tar.gz zcash-qt-wallet-v$APP_VERSION/ > /dev/null
cd bin && tar cvf linux-zcash-qt-wallet-v$APP_VERSION.tar.gz zcash-qt-wallet-v$APP_VERSION/ > /dev/null
echo "[OK]"
echo "Done"
echo "Done. Build is bin/linux-zcash-qt-wallet-v$APP_VERSION.tar.gz"

2
src/scripts/mkwinrelease.ps1

@ -24,6 +24,6 @@ Copy-Item LICENSE release/$target | Out-Null
Copy-Item README.md release/$target | Out-Null
echo "Zipping"
Compress-Archive -LiteralPath release/$target -DestinationPath "release/$target.zip"
Compress-Archive -LiteralPath release/$target -DestinationPath "release/Windows-$target.zip"
echo "Done"

1
src/sendtab.cpp

@ -252,7 +252,6 @@ void MainWindow::sendButton() {
}
}
// Add sender
json params = json::array();
params.push_back(fromAddr.toStdString());

92
src/settings.cpp

@ -2,9 +2,24 @@
#include "settings.h"
Settings::Settings()
{
refresh();
Settings* Settings::instance = nullptr;
Settings* Settings::init() {
if (instance != nullptr) return instance;
instance = new Settings();
// Load from settings first, because if they are redefined in the zcash.conf file,
// we'll overwrite them.
instance->loadFromSettings();
// Overwrite if any are defined in the zcash.conf
instance->loadFromFile();
return instance;
}
Settings* Settings::getInstance() {
return instance;
}
QString Settings::getHost() {
@ -25,43 +40,56 @@ QString Settings::getUsernamePassword() {
return username % ":" % password;
}
void Settings::refresh() {
// First step is to try and load from the QT Settings
void Settings::loadFromSettings() {
// First step is to try and load from the QT Settings. These are loaded first, because
// they could be overridden by whats in the zcash.conf, which will take precedence.
QSettings s;
host = s.value("connection/host", "127.0.0.1" ).toString();
port = s.value("connection/port", "8232" ).toString();
username = s.value("connection/rpcuser", "" ).toString();
password = s.value("connection/rpcpassword", "" ).toString();
if (username == "") {
// Nothing in QT Settings, so try to read from file.
QString zcashdconf = QStandardPaths::locate(QStandardPaths::HomeLocation, ".zcash/zcash.conf");
if (zcashdconf.isNull()) {
// No zcash file, just return with nothing
return;
}
password = s.value("connection/rpcpassword", "" ).toString();
}
QFile file(zcashdconf);
if (!file.open(QIODevice::ReadOnly)) {
qDebug() << file.errorString();
return;
}
void Settings::loadFromFile() {
// Nothing in QT Settings, so try to read from file.
QString zcashdconf = QStandardPaths::locate(QStandardPaths::HomeLocation, ".zcash/zcash.conf");
if (zcashdconf.isNull()) {
// No zcash file, just return with nothing
return;
}
QTextStream in(&file);
QFile file(zcashdconf);
if (!file.open(QIODevice::ReadOnly)) {
qDebug() << file.errorString();
return;
}
while (!in.atEnd()) {
QString line = in.readLine();
QStringList fields = line.split("=");
// If file was found, then setup some defaults
overridePort = "8232";
if (fields[0].trimmed().toLower() == "rpcuser") {
username = fields[1].trimmed();
}
if (fields[0].trimmed().toLower() == "rpcpassword") {
password = fields[1].trimmed();
}
}
QTextStream in(&file);
while (!in.atEnd()) {
QString line = in.readLine();
QStringList fields = line.split("=");
file.close();
if (fields[0].trimmed().toLower() == "rpcuser") {
username = fields[1].trimmed();
}
if (fields[0].trimmed().toLower() == "rpcpassword") {
password = fields[1].trimmed();
}
if (fields[0].trimmed().toLower() == "rpcport") {
overridePort = fields[1].trimmed();
}
if (fields[0].trimmed().toLower() == "testnet" &&
fields[1].trimmed() == "1" &&
overridePort.isEmpty()) {
overridePort = "18232";
}
}
}
file.close();
}

10
src/settings.h

@ -6,7 +6,8 @@
class Settings
{
public:
Settings();
static Settings* init();
static Settings* getInstance();
QString getUsernamePassword();
QString getHost();
@ -15,8 +16,13 @@ public:
void setDefaultPort(int port) {overridePort = QString::number(port);}
double fees() { return 0.0001; }
void refresh();
void loadFromSettings();
void loadFromFile();
private:
// This class can only be accessed through Settings::getInstance()
Settings() = default;
static Settings* instance;
QString host;
QString port;

34
src/settings.ui

@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>362</height>
<width>441</width>
<height>430</height>
</rect>
</property>
<property name="windowTitle">
@ -38,7 +38,7 @@
<property name="leftMargin">
<number>10</number>
</property>
<item row="4" column="0">
<item row="6" column="0">
<widget class="QLabel" name="label_3">
<property name="minimumSize">
<size>
@ -51,10 +51,10 @@
</property>
</widget>
</item>
<item row="5" column="0">
<item row="7" column="0">
<widget class="QLineEdit" name="rpcuser"/>
</item>
<item row="0" column="0">
<item row="2" column="0">
<widget class="QLabel" name="label">
<property name="minimumSize">
<size>
@ -67,21 +67,21 @@
</property>
</widget>
</item>
<item row="1" column="0">
<item row="3" column="0">
<widget class="QLineEdit" name="hostname">
<property name="placeholderText">
<string>127.0.0.1</string>
</property>
</widget>
</item>
<item row="3" column="0">
<item row="5" column="0">
<widget class="QLineEdit" name="port">
<property name="placeholderText">
<string>8232</string>
</property>
</widget>
</item>
<item row="6" column="0">
<item row="8" column="0">
<widget class="QLabel" name="label_4">
<property name="minimumSize">
<size>
@ -94,10 +94,10 @@
</property>
</widget>
</item>
<item row="7" column="0">
<item row="9" column="0">
<widget class="QLineEdit" name="rpcpassword"/>
</item>
<item row="2" column="0">
<item row="4" column="0">
<widget class="QLabel" name="label_2">
<property name="minimumSize">
<size>
@ -110,6 +110,20 @@
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Values configured in ~/.zcash/zcash.conf &lt;br/&gt;will overwrite these values&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="Line" name="line">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
</layout>
</widget>
</item>

20
src/ui_mainwindow.h

@ -45,6 +45,7 @@ public:
QAction *actionAbout;
QAction *actionSettings;
QAction *actionDonate;
QAction *actionImport_Private_Keys;
QWidget *centralWidget;
QGridLayout *gridLayout_3;
QTabWidget *tabWidget;
@ -78,6 +79,7 @@ public:
QHBoxLayout *horizontalLayout_15;
QLabel *label_5;
QLineEdit *sendAddressBalance;
QSpacerItem *horizontalSpacer_6;
QGroupBox *groupBox_3;
QVBoxLayout *verticalLayout_3;
QScrollArea *sendToScrollArea;
@ -148,6 +150,8 @@ public:
actionSettings->setObjectName(QStringLiteral("actionSettings"));
actionDonate = new QAction(MainWindow);
actionDonate->setObjectName(QStringLiteral("actionDonate"));
actionImport_Private_Keys = new QAction(MainWindow);
actionImport_Private_Keys->setObjectName(QStringLiteral("actionImport_Private_Keys"));
centralWidget = new QWidget(MainWindow);
centralWidget->setObjectName(QStringLiteral("centralWidget"));
gridLayout_3 = new QGridLayout(centralWidget);
@ -312,10 +316,20 @@ public:
sendAddressBalance = new QLineEdit(groupBox_4);
sendAddressBalance->setObjectName(QStringLiteral("sendAddressBalance"));
QSizePolicy sizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(sendAddressBalance->sizePolicy().hasHeightForWidth());
sendAddressBalance->setSizePolicy(sizePolicy);
sendAddressBalance->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter);
sendAddressBalance->setReadOnly(true);
horizontalLayout_15->addWidget(sendAddressBalance);
horizontalSpacer_6 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
horizontalLayout_15->addItem(horizontalSpacer_6);
verticalLayout_6->addLayout(horizontalLayout_15);
@ -508,9 +522,6 @@ public:
rdioTAddr = new QRadioButton(groupBox_6);
rdioTAddr->setObjectName(QStringLiteral("rdioTAddr"));
QSizePolicy sizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(rdioTAddr->sizePolicy().hasHeightForWidth());
rdioTAddr->setSizePolicy(sizePolicy);
@ -622,6 +633,8 @@ public:
menuBar->addAction(menuBalance->menuAction());
menuBar->addAction(menuHelp->menuAction());
menuBalance->addAction(actionImport_Private_Keys);
menuBalance->addSeparator();
menuBalance->addAction(actionSettings);
menuBalance->addSeparator();
menuBalance->addAction(actionExit);
@ -643,6 +656,7 @@ public:
actionAbout->setText(QApplication::translate("MainWindow", "About", nullptr));
actionSettings->setText(QApplication::translate("MainWindow", "Settings", nullptr));
actionDonate->setText(QApplication::translate("MainWindow", "Donate", nullptr));
actionImport_Private_Keys->setText(QApplication::translate("MainWindow", "Import Private Keys", nullptr));
groupBox->setTitle(QApplication::translate("MainWindow", "Summary", nullptr));
label->setText(QApplication::translate("MainWindow", "Shielded", nullptr));
balSheilded->setText(QString());

34
src/ui_settings.h

@ -13,6 +13,7 @@
#include <QtWidgets/QApplication>
#include <QtWidgets/QDialog>
#include <QtWidgets/QDialogButtonBox>
#include <QtWidgets/QFrame>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QGroupBox>
#include <QtWidgets/QLabel>
@ -42,6 +43,8 @@ public:
QLabel *label_4;
QLineEdit *rpcpassword;
QLabel *label_2;
QLabel *label_5;
QFrame *line;
QSpacerItem *verticalSpacer;
QDialogButtonBox *buttonBox;
@ -49,7 +52,7 @@ public:
{
if (Settings->objectName().isEmpty())
Settings->setObjectName(QStringLiteral("Settings"));
Settings->resize(400, 362);
Settings->resize(441, 430);
Settings->setModal(true);
verticalLayout = new QVBoxLayout(Settings);
verticalLayout->setObjectName(QStringLiteral("verticalLayout"));
@ -70,45 +73,57 @@ public:
label_3->setObjectName(QStringLiteral("label_3"));
label_3->setMinimumSize(QSize(60, 0));
gridLayout->addWidget(label_3, 4, 0, 1, 1);
gridLayout->addWidget(label_3, 6, 0, 1, 1);
rpcuser = new QLineEdit(groupBox);
rpcuser->setObjectName(QStringLiteral("rpcuser"));
gridLayout->addWidget(rpcuser, 5, 0, 1, 1);
gridLayout->addWidget(rpcuser, 7, 0, 1, 1);
label = new QLabel(groupBox);
label->setObjectName(QStringLiteral("label"));
label->setMinimumSize(QSize(60, 0));
gridLayout->addWidget(label, 0, 0, 1, 1);
gridLayout->addWidget(label, 2, 0, 1, 1);
hostname = new QLineEdit(groupBox);
hostname->setObjectName(QStringLiteral("hostname"));
gridLayout->addWidget(hostname, 1, 0, 1, 1);
gridLayout->addWidget(hostname, 3, 0, 1, 1);
port = new QLineEdit(groupBox);
port->setObjectName(QStringLiteral("port"));
gridLayout->addWidget(port, 3, 0, 1, 1);
gridLayout->addWidget(port, 5, 0, 1, 1);
label_4 = new QLabel(groupBox);
label_4->setObjectName(QStringLiteral("label_4"));
label_4->setMinimumSize(QSize(60, 0));
gridLayout->addWidget(label_4, 6, 0, 1, 1);
gridLayout->addWidget(label_4, 8, 0, 1, 1);
rpcpassword = new QLineEdit(groupBox);
rpcpassword->setObjectName(QStringLiteral("rpcpassword"));
gridLayout->addWidget(rpcpassword, 7, 0, 1, 1);
gridLayout->addWidget(rpcpassword, 9, 0, 1, 1);
label_2 = new QLabel(groupBox);
label_2->setObjectName(QStringLiteral("label_2"));
label_2->setMinimumSize(QSize(60, 0));
gridLayout->addWidget(label_2, 2, 0, 1, 1);
gridLayout->addWidget(label_2, 4, 0, 1, 1);
label_5 = new QLabel(groupBox);
label_5->setObjectName(QStringLiteral("label_5"));
gridLayout->addWidget(label_5, 0, 0, 1, 1);
line = new QFrame(groupBox);
line->setObjectName(QStringLiteral("line"));
line->setFrameShape(QFrame::HLine);
line->setFrameShadow(QFrame::Sunken);
gridLayout->addWidget(line, 1, 0, 1, 1);
verticalLayout_2->addWidget(groupBox);
@ -156,6 +171,7 @@ public:
port->setPlaceholderText(QApplication::translate("Settings", "8232", nullptr));
label_4->setText(QApplication::translate("Settings", "RPC Password", nullptr));
label_2->setText(QApplication::translate("Settings", "Port", nullptr));
label_5->setText(QApplication::translate("Settings", "<html><head/><body><p>Values configured in ~/.zcash/zcash.conf <br/>will overwrite these values</p></body></html>", nullptr));
tabWidget->setTabText(tabWidget->indexOf(tab), QApplication::translate("Settings", "Connection", nullptr));
} // retranslateUi

Loading…
Cancel
Save