#include "addressbookpage.h"
#include "sendcoinsdialog.h"
#include "signverifymessagedialog.h"
+#include "secondauthdialog.h"
#include "multisigdialog.h"
#include "optionsdialog.h"
#include "aboutdialog.h"
#include <iostream>
extern bool fWalletUnlockMintOnly;
+extern uint64_t nStakeInputsMapSize;
BitcoinGUI::BitcoinGUI(QWidget *parent):
QMainWindow(parent),
clientModel(0),
walletModel(0),
+ signVerifyMessageDialog(0),
+ secondAuthDialog(0),
+ multisigPage(0),
encryptWalletAction(0),
lockWalletAction(0),
unlockWalletAction(0),
notificator(0),
rpcConsole(0),
aboutDialog(0),
- optionsDialog(0),
- multisigPage(0)
+ optionsDialog(0)
{
resize(850, 550);
setWindowTitle(tr("NovaCoin") + " - " + tr("Wallet"));
sendCoinsPage = new SendCoinsDialog(this);
- signVerifyMessageDialog = new SignVerifyMessageDialog(this);
+ signVerifyMessageDialog = new SignVerifyMessageDialog(0);
+
+ secondAuthDialog = new SecondAuthDialog(0);
multisigPage = new MultisigDialog(0);
rpcConsole = new RPCConsole(0);
connect(openRPCConsoleAction, SIGNAL(triggered()), rpcConsole, SLOT(show()));
+ connect(openRPCConsoleAction, SIGNAL(triggered()), rpcConsole, SLOT(raise()));
aboutDialog = new AboutDialog(0);
optionsDialog = new OptionsDialog(0);
delete aboutDialog;
delete optionsDialog;
delete multisigPage;
+ delete secondAuthDialog;
+ delete signVerifyMessageDialog;
}
void BitcoinGUI::createActions()
signMessageAction->setStatusTip(tr("Sign messages with your Novacoin addresses to prove you own them"));
verifyMessageAction = new QAction(QIcon(":/icons/transaction_0"), tr("&Verify message..."), this);
verifyMessageAction->setStatusTip(tr("Verify messages to ensure they were signed with specified Novacoin addresses"));
+ secondAuthAction = new QAction(QIcon(":/icons/key"), tr("Second &auth..."), this);
+ secondAuthAction->setStatusTip(tr("Second auth with your Novacoin addresses"));
lockWalletAction = new QAction(QIcon(":/icons/lock_closed"), tr("&Lock wallet"), this);
lockWalletAction->setStatusTip(tr("Lock wallet"));
connect(changePassphraseAction, SIGNAL(triggered()), this, SLOT(changePassphrase()));
connect(signMessageAction, SIGNAL(triggered()), this, SLOT(gotoSignMessageTab()));
connect(verifyMessageAction, SIGNAL(triggered()), this, SLOT(gotoVerifyMessageTab()));
+ connect(secondAuthAction, SIGNAL(triggered()), this, SLOT(gotoSecondAuthPage()));
}
void BitcoinGUI::createMenuBar()
file->addAction(exportAction);
file->addAction(signMessageAction);
file->addAction(verifyMessageAction);
+ file->addAction(secondAuthAction);
file->addAction(multisigAction);
file->addSeparator();
file->addAction(quitAction);
receiveCoinsPage->setModel(walletModel->getAddressTableModel());
sendCoinsPage->setModel(walletModel);
signVerifyMessageDialog->setModel(walletModel);
+ secondAuthDialog->setModel(walletModel);
multisigPage->setModel(walletModel);
setEncryptionStatus(walletModel->getEncryptionStatus());
trayIconMenu->addSeparator();
trayIconMenu->addAction(signMessageAction);
trayIconMenu->addAction(verifyMessageAction);
+ trayIconMenu->addAction(secondAuthAction);
trayIconMenu->addSeparator();
trayIconMenu->addAction(optionsAction);
trayIconMenu->addAction(openRPCConsoleAction);
progressBar->setVisible(false);
}
+ tooltip = tr("Current PoW difficulty is %1.").arg(clientModel->getDifficulty(false)) + QString("<br>") + tooltip;
+ tooltip = tr("Current PoS difficulty is %1.").arg(clientModel->getDifficulty(true)) + QString("<br>") + tooltip;
+
QDateTime lastBlockDate = clientModel->getLastBlockDate();
int secs = lastBlockDate.secsTo(QDateTime::currentDateTime());
QString text;
return;
}
- float nKernelsRate = 0, nCoinDaysRate = 0;
- walletModel->getStakeStats(nKernelsRate, nCoinDaysRate);
-
- if (nKernelsRate > 0)
+ if (nStakeInputsMapSize > 0)
{
labelMiningIcon->setPixmap(QIcon(":/icons/mining_active").pixmap(STATUSBAR_ICONSIZE,STATUSBAR_ICONSIZE));
uint64_t nNetworkWeight = clientModel->getPoSKernelPS();
-/*
- double dDifficulty = clientModel->getDifficulty(true);
- QString msg;
-
- int nApproxTime = 4294967297 * dDifficulty / nTotalWeight;
- if (nApproxTime < 60)
- msg = tr("%n second(s)", "", nApproxTime);
- else if (nApproxTime < 60*60)
- msg = tr("%n minute(s)", "", nApproxTime / 60);
- else if (nApproxTime < 24*60*60)
- msg = tr("%n hour(s)", "", nApproxTime / 3600);
- else
- msg = tr("%n day(s)", "", nApproxTime / 86400);
-
- labelMiningIcon->setToolTip(tr("Stake miner is active\nYour current stake weight is %1\nNetwork weight is %2\nAverage block generation time is %3").arg(nTotalWeight).arg(dNetworkWeight).arg(msg));
-*/
-
- labelMiningIcon->setToolTip(QString("<nobr>")+tr("Stake miner is active<br>Kernel rate is %1 k/s<br>CD rate is %2 CD/s<br>Network weight is %3").arg(nKernelsRate).arg(nCoinDaysRate).arg(nNetworkWeight)+QString("<\nobr>"));
+ labelMiningIcon->setToolTip(QString("<nobr>")+tr("Stake miner is active<br>%1 inputs being used for mining<br>Network weight is %3").arg(nStakeInputsMapSize).arg(nNetworkWeight)+QString("<\nobr>"));
}
else
labelMiningIcon->setToolTip(tr("No suitable inputs were found"));
}
-void BitcoinGUI::error(const QString &title, const QString &message, bool modal)
-{
- // Report errors from network/worker thread
- if(modal)
- {
- QMessageBox::critical(this, title, message, QMessageBox::Ok, QMessageBox::Ok);
- } else {
- notificator->notify(Notificator::Critical, title, message);
- }
-}
-
void BitcoinGUI::message(const QString &title, const QString &message, unsigned int style, const QString &detail)
{
QString strTitle = tr("NovaCoin") + " - ";
signVerifyMessageDialog->setAddress_VM(addr);
}
+void BitcoinGUI::gotoSecondAuthPage(QString addr)
+{
+ secondAuthDialog->show();
+ secondAuthDialog->raise();
+ secondAuthDialog->activateWindow();
+}
+
void BitcoinGUI::gotoMultisigPage()
{
multisigPage->show();
- multisigPage->setFocus();
+ multisigPage->raise();
+ multisigPage->activateWindow();
}
void BitcoinGUI::dragEnterEvent(QDragEnterEvent *event)
labelEncryptionIcon->setToolTip(tr("Wallet is <b>encrypted</b> and currently <b>unlocked</b>"));
encryptWalletAction->setChecked(true);
changePassphraseAction->setEnabled(true);
- encryptWalletAction->setEnabled(false); // TODO: decrypt currently not supported
+ encryptWalletAction->setEnabled(true);
lockWalletAction->setEnabled(true);
lockWalletAction->setChecked(false);
labelEncryptionIcon->setToolTip(tr("Wallet is <b>encrypted</b> and currently <b>locked</b>"));
encryptWalletAction->setChecked(true);
changePassphraseAction->setEnabled(true);
- encryptWalletAction->setEnabled(false); // TODO: decrypt currently not supported
+ encryptWalletAction->setEnabled(true);
lockWalletAction->setChecked(true);
unlockWalletAction->setChecked(false);
QString filename = QFileDialog::getSaveFileName(this, tr("Dump Wallet"), saveDir, tr("Wallet dump (*.txt)"));
if(!filename.isEmpty()) {
if(!walletModel->dumpWallet(filename)) {
- error(tr("Dump failed"),
+ message(tr("Dump failed"),
tr("An error happened while trying to save the keys to your location.\n"
"Keys were not saved.")
,CClientUIInterface::MSG_ERROR);
QString filename = QFileDialog::getOpenFileName(this, tr("Import Wallet"), openDir, tr("Wallet dump (*.txt)"));
if(!filename.isEmpty()) {
if(!walletModel->importWallet(filename)) {
- error(tr("Import Failed"),
+ message(tr("Import Failed"),
tr("An error happened while trying to import the keys.\n"
"Some or all keys from:\n %1,\n were not imported into your wallet.")
.arg(filename)
{
showNormalIfMinimized(true);
}
+
+void BitcoinGUI::error(const QString &title, const QString &message, bool modal)
+{
+ // Report errors from network/worker thread
+ if(modal)
+ {
+ QMessageBox::critical(this, title, message, QMessageBox::Ok, QMessageBox::Ok);
+ } else {
+ notificator->notify(Notificator::Critical, title, message);
+ }
+}