Make startup window modal, other small fixes

This commit is contained in:
adityapk
2018-11-08 14:05:59 -08:00
parent acb06ab588
commit b1a5d6ec69
6 changed files with 43 additions and 45 deletions

View File

@@ -16,13 +16,6 @@ ConnectionLoader::ConnectionLoader(MainWindow* main, RPC* rpc) {
connD = new Ui_ConnectionDialog(); connD = new Ui_ConnectionDialog();
connD->setupUi(d); connD->setupUi(d);
connD->topIcon->setBasePixmap(QIcon(":/icons/res/icon.ico").pixmap(256, 256)); connD->topIcon->setBasePixmap(QIcon(":/icons/res/icon.ico").pixmap(256, 256));
// Center on screen
QRect screenGeometry = QApplication::desktop()->screenGeometry(d);
int x = (screenGeometry.width() - d->width()) / 2;
int y = (screenGeometry.height() - d->height()) / 2;
d->move(x, y);
} }
ConnectionLoader::~ConnectionLoader() { ConnectionLoader::~ConnectionLoader() {
@@ -31,7 +24,11 @@ ConnectionLoader::~ConnectionLoader() {
} }
void ConnectionLoader::loadConnection() { void ConnectionLoader::loadConnection() {
d->show(); QTimer::singleShot(1, [=]() { this->doAutoConnect(); });
d->exec();
}
void ConnectionLoader::doAutoConnect() {
// Priority 1: Try to connect to detect zcash.conf and connect to it. // Priority 1: Try to connect to detect zcash.conf and connect to it.
auto config = autoDetectZcashConf(); auto config = autoDetectZcashConf();
@@ -44,7 +41,7 @@ void ConnectionLoader::loadConnection() {
this->showInformation("Starting Embedded zcashd"); this->showInformation("Starting Embedded zcashd");
if (this->startEmbeddedZcashd()) { if (this->startEmbeddedZcashd()) {
// Embedded zcashd started up. Wait a second and then refresh the connection // Embedded zcashd started up. Wait a second and then refresh the connection
QTimer::singleShot(1000, [=]() { loadConnection(); } ); QTimer::singleShot(1000, [=]() { doAutoConnect(); } );
} else { } else {
// Errored out, show error and exit // Errored out, show error and exit
QString explanation = QString() % "Couldn't start the embedded zcashd.\n\n" % QString explanation = QString() % "Couldn't start the embedded zcashd.\n\n" %
@@ -113,7 +110,7 @@ void ConnectionLoader::createZcashConf() {
out << "rpcpassword=" % randomPassword() << "\n"; out << "rpcpassword=" % randomPassword() << "\n";
file.close(); file.close();
this->loadConnection(); this->doAutoConnect();
}); });
} }
@@ -294,11 +291,13 @@ void ConnectionLoader::doManualConnect() {
} }
void ConnectionLoader::doRPCSetConnection(Connection* conn) { void ConnectionLoader::doRPCSetConnection(Connection* conn) {
if (ezcashd != nullptr) { if (ezcashd) {
rpc->setEZcashd(ezcashd); rpc->setEZcashd(ezcashd);
} }
rpc->setConnection(conn); rpc->setConnection(conn);
d->accept();
delete this; delete this;
} }
@@ -368,9 +367,11 @@ void ConnectionLoader::showInformation(QString info, QString detail) {
* Show error will close the loading dialog and show an error. * Show error will close the loading dialog and show an error.
*/ */
void ConnectionLoader::showError(QString explanation) { void ConnectionLoader::showError(QString explanation) {
d->hide(); rpc->setEZcashd(nullptr);
main->ui->statusBar->showMessage("Connection Error"); rpc->noConnection();
QMessageBox::critical(main, "Connection Error", explanation, QMessageBox::Ok); QMessageBox::critical(main, "Connection Error", explanation, QMessageBox::Ok);
d->close();
} }
QString ConnectionLoader::locateZcashConfFile() { QString ConnectionLoader::locateZcashConfFile() {

View File

@@ -41,6 +41,7 @@ private:
Connection* makeConnection(std::shared_ptr<ConnectionConfig> config); Connection* makeConnection(std::shared_ptr<ConnectionConfig> config);
void doAutoConnect();
void doManualConnect(); void doManualConnect();
void createZcashConf(); void createZcashConf();
@@ -53,7 +54,6 @@ private:
bool startEmbeddedZcashd(); bool startEmbeddedZcashd();
void refreshZcashdState(Connection* connection, std::function<void(void)> refused); void refreshZcashdState(Connection* connection, std::function<void(void)> refused);
int getProgressFromStatus(QString status);
void showError(QString explanation); void showError(QString explanation);
void showInformation(QString info, QString detail = ""); void showInformation(QString info, QString detail = "");

View File

@@ -373,13 +373,6 @@ void MainWindow::setupSettingsModal() {
QIntValidator validator(0, 65535); QIntValidator validator(0, 65535);
settings.port->setValidator(&validator); settings.port->setValidator(&validator);
// Load current values into the dialog
auto conf = Settings::getInstance()->getSettings();
settings.hostname->setText(conf.host);
settings.port->setText(conf.port);
settings.rpcuser->setText(conf.rpcuser);
settings.rpcpassword->setText(conf.rpcpassword);
// If values are coming from zcash.conf, then disable all the fields // If values are coming from zcash.conf, then disable all the fields
auto zcashConfLocation = Settings::getInstance()->getZcashdConfLocation(); auto zcashConfLocation = Settings::getInstance()->getZcashdConfLocation();
if (!zcashConfLocation.isEmpty()) { if (!zcashConfLocation.isEmpty()) {
@@ -390,6 +383,13 @@ void MainWindow::setupSettingsModal() {
settings.rpcpassword->setEnabled(false); settings.rpcpassword->setEnabled(false);
} }
else { else {
// Load current values into the dialog
auto conf = Settings::getInstance()->getSettings();
settings.hostname->setText(conf.host);
settings.port->setText(conf.port);
settings.rpcuser->setText(conf.rpcuser);
settings.rpcpassword->setText(conf.rpcpassword);
settings.confMsg->setText("No local zcash.conf found. Please configure connection manually."); settings.confMsg->setText("No local zcash.conf found. Please configure connection manually.");
settings.hostname->setEnabled(true); settings.hostname->setEnabled(true);
settings.port->setEnabled(true); settings.port->setEnabled(true);

View File

@@ -316,8 +316,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>920</width> <width>922</width>
<height>334</height> <height>376</height>
</rect> </rect>
</property> </property>
<layout class="QVBoxLayout" name="sendToLayout"> <layout class="QVBoxLayout" name="sendToLayout">
@@ -767,7 +767,7 @@
<item row="2" column="2"> <item row="2" column="2">
<widget class="QLabel" name="numconnections"> <widget class="QLabel" name="numconnections">
<property name="text"> <property name="text">
<string>TextLabel</string> <string>Loading...</string>
</property> </property>
</widget> </widget>
</item> </item>
@@ -781,7 +781,7 @@
<item row="3" column="2"> <item row="3" column="2">
<widget class="QLabel" name="solrate"> <widget class="QLabel" name="solrate">
<property name="text"> <property name="text">
<string>TextLabel</string> <string>Loading...</string>
</property> </property>
</widget> </widget>
</item> </item>
@@ -802,7 +802,7 @@
<item row="1" column="2"> <item row="1" column="2">
<widget class="QLabel" name="blockheight"> <widget class="QLabel" name="blockheight">
<property name="text"> <property name="text">
<string>TextLabel</string> <string>Loading...</string>
</property> </property>
</widget> </widget>
</item> </item>
@@ -864,7 +864,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>968</width> <width>968</width>
<height>22</height> <height>21</height>
</rect> </rect>
</property> </property>
<widget class="QMenu" name="menuFile"> <widget class="QMenu" name="menuFile">

View File

@@ -9,8 +9,8 @@ using json = nlohmann::json;
RPC::RPC(MainWindow* main) { RPC::RPC(MainWindow* main) {
auto cl = new ConnectionLoader(main, this); auto cl = new ConnectionLoader(main, this);
// Show a default no connection message until we can connect. // Execute the load connection async, so we can set up the rest of RPC properly.
cl->loadConnection(); QTimer::singleShot(1, [=]() {cl->loadConnection(); });
this->main = main; this->main = main;
this->ui = main->ui; this->ui = main->ui;
@@ -66,6 +66,9 @@ RPC::~RPC() {
void RPC::setEZcashd(QProcess* p) { void RPC::setEZcashd(QProcess* p) {
ezcashd = p; ezcashd = p;
if (ezcashd == nullptr)
ui->tabWidget->removeTab(4);
} }
void RPC::setConnection(Connection* c) { void RPC::setConnection(Connection* c) {
@@ -327,7 +330,9 @@ void RPC::fillTxJsonParams(json& params, Tx tx) {
void RPC::noConnection() { void RPC::noConnection() {
ui->statusBar->showMessage("No Connection to zcashd"); QIcon i = QApplication::style()->standardIcon(QStyle::SP_MessageBoxCritical);
main->statusIcon->setPixmap(i.pixmap(16, 16));
main->statusLabel->setText("No Connection");
} }
// Refresh received z txs by calling z_listreceivedbyaddress/gettransaction // Refresh received z txs by calling z_listreceivedbyaddress/gettransaction
@@ -439,7 +444,6 @@ void RPC::refreshReceivedZTrans(QList<QString> zaddrs) {
); );
} }
/// This will refresh all the balance data from zcashd /// This will refresh all the balance data from zcashd
void RPC::refresh(bool force) { void RPC::refresh(bool force) {
if (conn == nullptr) if (conn == nullptr)
@@ -482,7 +486,7 @@ void RPC::getInfoThenRefresh(bool force) {
} }
// Get network sol/s // Get network sol/s
if (ezcashd != nullptr) { if (ezcashd) {
int conns = reply["connections"].get<json::number_integer_t>(); int conns = reply["connections"].get<json::number_integer_t>();
json payload = { json payload = {
@@ -498,12 +502,8 @@ void RPC::getInfoThenRefresh(bool force) {
ui->numconnections->setText(QString::number(conns)); ui->numconnections->setText(QString::number(conns));
ui->solrate->setText(QString::number(solrate) % " Sol/s"); ui->solrate->setText(QString::number(solrate) % " Sol/s");
}); });
} else {
qDebug() << "removing tab!";
ui->tabWidget->removeTab(4);
} }
// Call to see if the blockchain is syncing. // Call to see if the blockchain is syncing.
json payload = { json payload = {
{"jsonrpc", "1.0"}, {"jsonrpc", "1.0"},
@@ -526,7 +526,7 @@ void RPC::getInfoThenRefresh(bool force) {
qint64 estBlocks = (QDateTime::currentMSecsSinceEpoch() - genisisTimeMSec) / 2.5 / 60 / 1000; qint64 estBlocks = (QDateTime::currentMSecsSinceEpoch() - genisisTimeMSec) / 2.5 / 60 / 1000;
// Round to nearest 10 // Round to nearest 10
estBlocks = ((estBlocks + 5) / 10) * 10; estBlocks = ((estBlocks + 5) / 10) * 10;
ui->blockheight->setText(ui->blockheight->text() % " / ~" % QString::number(estBlocks) % ui->blockheight->setText(ui->blockheight->text() % /*" / ~" % QString::number(estBlocks) % */
" ( " % QString::number(progress * 100, 'f', 0) % "% )"); " ( " % QString::number(progress * 100, 'f', 0) % "% )");
} }
@@ -871,11 +871,10 @@ void RPC::shutdownZcashd() {
conn->doRPCWithDefaultErrorHandling(payload, [=](auto) {}); conn->doRPCWithDefaultErrorHandling(payload, [=](auto) {});
conn->shutdown(); conn->shutdown();
QMessageBox d(main); QMessageBox d(main);
d.setIcon(QMessageBox::Icon::Information); d.setIcon(QMessageBox::Icon::Information);
d.setWindowTitle("Waiting for zcashd to exit"); d.setWindowTitle("Waiting for zcashd to exit");
d.setText("Please wait for zcashd to exit. Don't click OK!"); d.setText("Please wait for zcashd to exit.");
d.setStandardButtons(QMessageBox::NoButton); d.setStandardButtons(QMessageBox::NoButton);
QTimer waiter(main); QTimer waiter(main);

View File

@@ -59,16 +59,14 @@ public:
void importTPrivKey(QString addr, bool rescan, const std::function<void(json)>& cb); void importTPrivKey(QString addr, bool rescan, const std::function<void(json)>& cb);
void shutdownZcashd(); void shutdownZcashd();
void noConnection();
void getAllPrivKeys(const std::function<void(QList<QPair<QString, QString>>)>); void getAllPrivKeys(const std::function<void(QList<QPair<QString, QString>>)>);
Turnstile* getTurnstile() { return turnstile; } Turnstile* getTurnstile() { return turnstile; }
Connection* getConnection() { return conn; } Connection* getConnection() { return conn; }
private: private:
void noConnection();
void refreshBalances(); void refreshBalances();
void refreshTransactions(); void refreshTransactions();