X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=src%2Fqt%2Fbitcoingui.cpp;h=f9b6da627066cb68bbcbe7b2dc70f965c599e89d;hb=f80f92ee0c373c25e8f5216427be24e4b5f362ab;hp=45e2c4cae7139d77493b1b86f6486c64479b68cf;hpb=7ac0ffc894b6a23aa2e3a1e0939a15fe95fe9eca;p=novacoin.git diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp index 45e2c4c..f9b6da6 100644 --- a/src/qt/bitcoingui.cpp +++ b/src/qt/bitcoingui.cpp @@ -9,6 +9,7 @@ #include "addressbookpage.h" #include "sendcoinsdialog.h" #include "signverifymessagedialog.h" +#include "multisigdialog.h" #include "optionsdialog.h" #include "aboutdialog.h" #include "clientmodel.h" @@ -26,6 +27,7 @@ #include "guiutil.h" #include "ui_interface.h" #include "rpcconsole.h" +#include "mintingview.h" #ifdef Q_OS_MAC #include "macdockiconhandler.h" @@ -81,7 +83,8 @@ BitcoinGUI::BitcoinGUI(QWidget *parent): aboutQtAction(0), trayIcon(0), notificator(0), - rpcConsole(0) + rpcConsole(0), + aboutDialog(0) { resize(850, 550); setWindowTitle(tr("NovaCoin") + " - " + tr("Wallet")); @@ -116,6 +119,12 @@ BitcoinGUI::BitcoinGUI(QWidget *parent): vbox->addWidget(transactionView); transactionsPage->setLayout(vbox); + mintingPage = new QWidget(this); + QVBoxLayout *vboxMinting = new QVBoxLayout(); + mintingView = new MintingView(this); + vboxMinting->addWidget(mintingView); + mintingPage->setLayout(vboxMinting); + addressBookPage = new AddressBookPage(AddressBookPage::ForEditing, AddressBookPage::SendingTab); receiveCoinsPage = new AddressBookPage(AddressBookPage::ForEditing, AddressBookPage::ReceivingTab); @@ -124,9 +133,12 @@ BitcoinGUI::BitcoinGUI(QWidget *parent): signVerifyMessageDialog = new SignVerifyMessageDialog(this); + multisigPage = new MultisigDialog(this); + centralWidget = new QStackedWidget(this); centralWidget->addWidget(overviewPage); centralWidget->addWidget(transactionsPage); + centralWidget->addWidget(mintingPage); centralWidget->addWidget(addressBookPage); centralWidget->addWidget(receiveCoinsPage); centralWidget->addWidget(sendCoinsPage); @@ -186,9 +198,11 @@ BitcoinGUI::BitcoinGUI(QWidget *parent): // Double-clicking on a transaction on the transaction history page shows details connect(transactionView, SIGNAL(doubleClicked(QModelIndex)), transactionView, SLOT(showDetails())); - rpcConsole = new RPCConsole(this); + rpcConsole = new RPCConsole(0); connect(openRPCConsoleAction, SIGNAL(triggered()), rpcConsole, SLOT(show())); + aboutDialog = new AboutDialog(0); + // Clicking on "Verify Message" in the address book sends you to the verify message tab connect(addressBookPage, SIGNAL(verifyMessage(QString)), this, SLOT(gotoVerifyMessageTab(QString))); // Clicking on "Sign Message" in the receive coins page sends you to the sign message tab @@ -204,6 +218,9 @@ BitcoinGUI::~BitcoinGUI() #ifdef Q_OS_MAC delete appMenuBar; #endif + + delete rpcConsole; + delete aboutDialog; } void BitcoinGUI::createActions() @@ -234,12 +251,21 @@ void BitcoinGUI::createActions() historyAction->setShortcut(QKeySequence(Qt::ALT + Qt::Key_4)); tabGroup->addAction(historyAction); + mintingAction = new QAction(QIcon(":/icons/history"), tr("&Minting"), this); + mintingAction->setToolTip(tr("Show your minting capacity")); + mintingAction->setCheckable(true); + mintingAction->setShortcut(QKeySequence(Qt::ALT + Qt::Key_5)); + tabGroup->addAction(mintingAction); + addressBookAction = new QAction(QIcon(":/icons/address-book"), tr("&Address Book"), this); addressBookAction->setToolTip(tr("Edit the list of stored addresses and labels")); addressBookAction->setCheckable(true); - addressBookAction->setShortcut(QKeySequence(Qt::ALT + Qt::Key_5)); + addressBookAction->setShortcut(QKeySequence(Qt::ALT + Qt::Key_6)); tabGroup->addAction(addressBookAction); + multisigAction = new QAction(QIcon(":/icons/send"), tr("Multisig"), this); + tabGroup->addAction(multisigAction); + connect(overviewAction, SIGNAL(triggered()), this, SLOT(showNormalIfMinimized())); connect(overviewAction, SIGNAL(triggered()), this, SLOT(gotoOverviewPage())); connect(sendCoinsAction, SIGNAL(triggered()), this, SLOT(showNormalIfMinimized())); @@ -248,8 +274,12 @@ void BitcoinGUI::createActions() connect(receiveCoinsAction, SIGNAL(triggered()), this, SLOT(gotoReceiveCoinsPage())); connect(historyAction, SIGNAL(triggered()), this, SLOT(showNormalIfMinimized())); connect(historyAction, SIGNAL(triggered()), this, SLOT(gotoHistoryPage())); + connect(mintingAction, SIGNAL(triggered()), this, SLOT(showNormalIfMinimized())); + connect(mintingAction, SIGNAL(triggered()), this, SLOT(gotoMintingPage())); connect(addressBookAction, SIGNAL(triggered()), this, SLOT(showNormalIfMinimized())); connect(addressBookAction, SIGNAL(triggered()), this, SLOT(gotoAddressBookPage())); + connect(multisigAction, SIGNAL(triggered()), this, SLOT(showNormalIfMinimized())); + connect(multisigAction, SIGNAL(triggered()), this, SLOT(gotoMultisigPage())); quitAction = new QAction(QIcon(":/icons/quit"), tr("E&xit"), this); quitAction->setToolTip(tr("Quit application")); @@ -258,7 +288,11 @@ void BitcoinGUI::createActions() aboutAction = new QAction(QIcon(":/icons/bitcoin"), tr("&About NovaCoin"), this); aboutAction->setToolTip(tr("Show information about NovaCoin")); aboutAction->setMenuRole(QAction::AboutRole); +#if QT_VERSION < 0x050000 aboutQtAction = new QAction(QIcon(":/trolltech/qmessagebox/images/qtlogo-64.png"), tr("About &Qt"), this); +#else + aboutQtAction = new QAction(QIcon(":/qt-project.org/qmessagebox/images/qtlogo-64.png"), tr("About &Qt"), this); +#endif aboutQtAction->setToolTip(tr("Show information about Qt")); aboutQtAction->setMenuRole(QAction::AboutQtRole); optionsAction = new QAction(QIcon(":/icons/options"), tr("&Options..."), this); @@ -332,6 +366,7 @@ void BitcoinGUI::createMenuBar() file->addAction(exportAction); file->addAction(signMessageAction); file->addAction(verifyMessageAction); + file->addAction(multisigAction); file->addSeparator(); file->addAction(quitAction); @@ -359,11 +394,14 @@ void BitcoinGUI::createToolBars() toolbar->addAction(sendCoinsAction); toolbar->addAction(receiveCoinsAction); toolbar->addAction(historyAction); + toolbar->addAction(mintingAction); toolbar->addAction(addressBookAction); QToolBar *toolbar2 = addToolBar(tr("Actions toolbar")); toolbar2->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); toolbar2->addAction(exportAction); + toolbar2->setVisible(false); + } void BitcoinGUI::setClientModel(ClientModel *clientModel) @@ -397,7 +435,10 @@ void BitcoinGUI::setClientModel(ClientModel *clientModel) setNumBlocks(clientModel->getNumBlocks(), clientModel->getNumBlocksOfPeers()); connect(clientModel, SIGNAL(numBlocksChanged(int,int)), this, SLOT(setNumBlocks(int,int))); - connect(clientModel, SIGNAL(numBlocksChanged(int,int)), this, SLOT(updateMining())); + + QTimer *timer = new QTimer(this); + connect(timer, SIGNAL(timeout()), this, SLOT(updateMining())); + timer->start(10*1000); //10 seconds // Report errors from network/worker thread connect(clientModel, SIGNAL(error(QString,QString,bool)), this, SLOT(error(QString,QString,bool))); @@ -418,12 +459,14 @@ void BitcoinGUI::setWalletModel(WalletModel *walletModel) // Put transaction list in tabs transactionView->setModel(walletModel); + mintingView->setModel(walletModel); overviewPage->setModel(walletModel); addressBookPage->setModel(walletModel->getAddressTableModel()); receiveCoinsPage->setModel(walletModel->getAddressTableModel()); sendCoinsPage->setModel(walletModel); signVerifyMessageDialog->setModel(walletModel); + multisigPage->setModel(walletModel); setEncryptionStatus(walletModel->getEncryptionStatus()); connect(walletModel, SIGNAL(encryptionStatusChanged(int)), this, SLOT(setEncryptionStatus(int))); @@ -453,6 +496,7 @@ void BitcoinGUI::createTrayIcon() #else // Note: On Mac, the dock icon is used to provide the tray's functionality. MacDockIconHandler *dockIconHandler = MacDockIconHandler::instance(); + dockIconHandler->setMainWindow((QMainWindow *)this); trayIconMenu = dockIconHandler->dockMenu(); #endif @@ -460,6 +504,7 @@ void BitcoinGUI::createTrayIcon() trayIconMenu->addAction(toggleHideAction); trayIconMenu->addSeparator(); trayIconMenu->addAction(sendCoinsAction); + trayIconMenu->addAction(multisigAction); trayIconMenu->addAction(receiveCoinsAction); trayIconMenu->addSeparator(); trayIconMenu->addAction(signMessageAction); @@ -467,12 +512,12 @@ void BitcoinGUI::createTrayIcon() trayIconMenu->addSeparator(); trayIconMenu->addAction(optionsAction); trayIconMenu->addAction(openRPCConsoleAction); -#ifndef Q_OS_MAC // This is built-in on Mac +#ifndef Q_OS_MAC + // This is built-in on Mac trayIconMenu->addSeparator(); - trayIconMenu->addAction(quitAction); + trayIconMenu->addAction(quitAction); #endif - - notificator = new Notificator(qApp->applicationName(), trayIcon); + notificator = new Notificator(QApplication::applicationName(), trayIcon, this); } #ifndef Q_OS_MAC @@ -497,9 +542,9 @@ void BitcoinGUI::optionsClicked() void BitcoinGUI::aboutClicked() { - AboutDialog dlg; - dlg.setModel(clientModel); - dlg.exec(); + aboutDialog->setModel(clientModel); + aboutDialog->setWindowModality(Qt::ApplicationModal); + aboutDialog->show(); } void BitcoinGUI::setNumConnections(int count) @@ -647,14 +692,14 @@ void BitcoinGUI::updateMining() return; } - uint64 nMinWeight = 0, nMaxWeight = 0, nTotalWeight = 0; - walletModel->getStakeWeight(nMinWeight, nMaxWeight, nTotalWeight); + float nKernelsRate = 0, nCoinDaysRate = 0; + walletModel->getStakeStats(nKernelsRate, nCoinDaysRate); - if (nTotalWeight > 0) + if (nKernelsRate > 0) { labelMiningIcon->setPixmap(QIcon(":/icons/mining_active").pixmap(STATUSBAR_ICONSIZE,STATUSBAR_ICONSIZE)); - uint64 nNetworkWeight = clientModel->getPoSKernelPS(); + uint64_t nNetworkWeight = clientModel->getPoSKernelPS(); /* double dDifficulty = clientModel->getDifficulty(true); QString msg; @@ -673,7 +718,7 @@ void BitcoinGUI::updateMining() 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(tr("Stake miner is active\nYour current stake weight is %1\nNetwork weight is %2").arg(nTotalWeight).arg(nNetworkWeight)); + labelMiningIcon->setToolTip(QString("")+tr("Stake miner is active
Kernel rate is %1 k/s
CD rate is %2 CD/s
Network weight is %3").arg(nKernelsRate).arg(nCoinDaysRate).arg(nNetworkWeight)+QString("<\nobr>")); } else labelMiningIcon->setToolTip(tr("No suitable inputs were found")); @@ -764,13 +809,15 @@ void BitcoinGUI::closeEvent(QCloseEvent *event) if(clientModel) { #ifndef Q_OS_MAC // Ignored on Mac - if(!clientModel->getOptionsModel()->getMinimizeToTray() && - !clientModel->getOptionsModel()->getMinimizeOnClose()) + if(!clientModel->getOptionsModel()->getMinimizeOnClose()) { qApp->quit(); } #endif } + // close rpcConsole in case it was open to make some space for the shutdown window + rpcConsole->close(); + QMainWindow::closeEvent(event); } @@ -841,6 +888,17 @@ void BitcoinGUI::gotoHistoryPage() connect(exportAction, SIGNAL(triggered()), transactionView, SLOT(exportClicked())); } +void BitcoinGUI::gotoMintingPage() +{ + mintingAction->setChecked(true); + centralWidget->setCurrentWidget(mintingPage); + + exportAction->setEnabled(true); + disconnect(exportAction, SIGNAL(triggered()), 0, 0); + connect(exportAction, SIGNAL(triggered()), mintingView, SLOT(exportClicked())); +} + + void BitcoinGUI::gotoAddressBookPage() { addressBookAction->setChecked(true); @@ -888,6 +946,12 @@ void BitcoinGUI::gotoVerifyMessageTab(QString addr) signVerifyMessageDialog->setAddress_VM(addr); } +void BitcoinGUI::gotoMultisigPage() +{ + multisigPage->show(); + multisigPage->setFocus(); +} + void BitcoinGUI::dragEnterEvent(QDragEnterEvent *event) { // Accept only URIs @@ -1122,18 +1186,29 @@ void BitcoinGUI::showNormalIfMinimized(bool fToggleHidden) // activateWindow() (sometimes) helps with keyboard focus on Windows if (isHidden()) { + // Make sure the window is not minimized + setWindowState(windowState() & (~Qt::WindowMinimized | Qt::WindowActive)); + // Then show it show(); + raise(); activateWindow(); } else if (isMinimized()) { showNormal(); + raise(); activateWindow(); } else if (GUIUtil::isObscured(this)) { raise(); activateWindow(); + if(fToggleHidden) + { + Sleep(1); + if (GUIUtil::isObscured(this)) + hide(); + } } else if(fToggleHidden) hide();