diff --git a/src/Makefile.qt.include b/src/Makefile.qt.include
index 117f701c2d..78cdd390cc 100755
--- a/src/Makefile.qt.include
+++ b/src/Makefile.qt.include
@@ -287,10 +287,6 @@ GRIDCOINRESEARCH_QT_CPP = \
RES_ICONS = \
qt/res/icons/add.png \
- qt/res/icons/beacon_green.svg \
- qt/res/icons/beacon_grey.svg \
- qt/res/icons/beacon_red.svg \
- qt/res/icons/beacon_yellow.svg \
qt/res/icons/block.png \
qt/res/icons/chat.png \
qt/res/icons/clock1.png \
@@ -311,26 +307,21 @@ RES_ICONS = \
qt/res/icons/ex.png \
qt/res/icons/export.png \
qt/res/icons/filesave.png \
- qt/res/icons/gray_scraper.svg \
- qt/res/icons/green_check.svg \
- qt/res/icons/green_scraper.svg \
qt/res/icons/gridcoin.ico \
qt/res/icons/gridcoin_testnet.ico \
qt/res/icons/key.png \
qt/res/icons/message.svg \
- qt/res/icons/notsynced.svg \
qt/res/icons/qrcode.png \
qt/res/icons/quit.png \
qt/res/icons/remove.png \
qt/res/icons/round_gray_x.svg \
qt/res/icons/round_green_check.svg \
- qt/res/icons/staking_off.svg \
- qt/res/icons/staking_on.svg \
- qt/res/icons/staking_unable.svg \
qt/res/icons/superblock.svg \
qt/res/icons/transaction_conflicted.png \
qt/res/icons/transaction0.png \
- qt/res/icons/transaction2.png \
+ qt/res/icons/transaction2.svg \
+ qt/res/icons/tx_contract_beacon.svg \
+ qt/res/icons/tx_contract_voting.svg \
qt/res/icons/tx_inout.svg \
qt/res/icons/tx_input.svg \
qt/res/icons/tx_output.svg \
@@ -343,30 +334,84 @@ RES_ICONS = \
qt/res/icons/warning.svg \
qt/res/icons/white_and_red_x.svg \
qt/res/icons/www.png \
- qt/res/icons/icons_native/overview.svg \
- qt/res/icons/icons_light/overview.svg \
- qt/res/icons/icons_dark/overview.svg \
- qt/res/icons/icons_native/Voting.svg \
- qt/res/icons/icons_native/address-book.svg \
- qt/res/icons/icons_native/lock_closed.svg \
- qt/res/icons/icons_native/lock_open.svg \
- qt/res/icons/icons_native/receive.svg \
- qt/res/icons/icons_native/send.svg \
- qt/res/icons/icons_light/Voting.svg \
- qt/res/icons/icons_light/address-book.svg \
- qt/res/icons/icons_light/lock_closed.svg \
- qt/res/icons/icons_light/lock_open.svg \
- qt/res/icons/icons_light/receive.svg \
- qt/res/icons/icons_light/send.svg \
- qt/res/icons/icons_dark/Voting.svg \
- qt/res/icons/icons_dark/address-book.svg \
- qt/res/icons/icons_dark/lock_closed.svg \
- qt/res/icons/icons_dark/lock_open.svg \
- qt/res/icons/icons_dark/receive.svg \
- qt/res/icons/icons_dark/send.svg \
+ qt/res/icons/icons_light/sidebar_favorites_active.svg \
+ qt/res/icons/icons_light/sidebar_favorites_inactive.svg \
+ qt/res/icons/icons_light/sidebar_history_active.svg \
+ qt/res/icons/icons_light/sidebar_history_inactive.svg \
+ qt/res/icons/icons_light/sidebar_locked_active.svg \
+ qt/res/icons/icons_light/sidebar_locked_inactive.svg \
+ qt/res/icons/icons_light/sidebar_overview_active.svg \
+ qt/res/icons/icons_light/sidebar_overview_inactive.svg \
+ qt/res/icons/icons_light/sidebar_receive_active.svg \
+ qt/res/icons/icons_light/sidebar_receive_inactive.svg \
+ qt/res/icons/icons_light/sidebar_send_active.svg \
+ qt/res/icons/icons_light/sidebar_send_inactive.svg \
+ qt/res/icons/icons_light/sidebar_unlocked_active.svg \
+ qt/res/icons/icons_light/sidebar_unlocked_inactive.svg \
+ qt/res/icons/icons_light/sidebar_voting_active.svg \
+ qt/res/icons/icons_light/sidebar_voting_inactive.svg \
+ qt/res/icons/icons_light/status_beacon_green.svg \
+ qt/res/icons/icons_light/status_beacon_gray.svg \
+ qt/res/icons/icons_light/status_beacon_red.svg \
+ qt/res/icons/icons_light/status_beacon_yellow.svg \
+ qt/res/icons/icons_light/status_connections_average.svg \
+ qt/res/icons/icons_light/status_connections_good.svg \
+ qt/res/icons/icons_light/status_connections_none.svg \
+ qt/res/icons/icons_light/status_connections_normal.svg \
+ qt/res/icons/icons_light/status_connections_poor.svg \
+ qt/res/icons/icons_light/status_encryption_none.svg \
+ qt/res/icons/icons_light/status_encryption_locked.svg \
+ qt/res/icons/icons_light/status_encryption_unlocked.svg \
+ qt/res/icons/icons_light/status_scraper_inactive.svg \
+ qt/res/icons/icons_light/status_scraper_no_convergence.svg \
+ qt/res/icons/icons_light/status_scraper_ok.svg \
+ qt/res/icons/icons_light/status_scraper_waiting.svg \
+ qt/res/icons/icons_light/status_staking_no.svg \
+ qt/res/icons/icons_light/status_staking_problem.svg \
+ qt/res/icons/icons_light/status_staking_yes.svg \
+ qt/res/icons/icons_light/status_sync_done.svg \
+ qt/res/icons/icons_light/status_sync_stalled.svg \
+ qt/res/icons/icons_light/status_sync_syncing.svg \
+ qt/res/icons/icons_dark/sidebar_favorites_active.svg \
+ qt/res/icons/icons_dark/sidebar_favorites_inactive.svg \
+ qt/res/icons/icons_dark/sidebar_history_active.svg \
+ qt/res/icons/icons_dark/sidebar_history_inactive.svg \
+ qt/res/icons/icons_dark/sidebar_locked_active.svg \
+ qt/res/icons/icons_dark/sidebar_locked_inactive.svg \
+ qt/res/icons/icons_dark/sidebar_overview_active.svg \
+ qt/res/icons/icons_dark/sidebar_overview_inactive.svg \
+ qt/res/icons/icons_dark/sidebar_receive_active.svg \
+ qt/res/icons/icons_dark/sidebar_receive_inactive.svg \
+ qt/res/icons/icons_dark/sidebar_send_active.svg \
+ qt/res/icons/icons_dark/sidebar_send_inactive.svg \
+ qt/res/icons/icons_dark/sidebar_unlocked_active.svg \
+ qt/res/icons/icons_dark/sidebar_unlocked_inactive.svg \
+ qt/res/icons/icons_dark/sidebar_voting_active.svg \
+ qt/res/icons/icons_dark/sidebar_voting_inactive.svg \
+ qt/res/icons/icons_dark/status_beacon_green.svg \
+ qt/res/icons/icons_dark/status_beacon_gray.svg \
+ qt/res/icons/icons_dark/status_beacon_red.svg \
+ qt/res/icons/icons_dark/status_beacon_yellow.svg \
+ qt/res/icons/icons_dark/status_connections_average.svg \
+ qt/res/icons/icons_dark/status_connections_good.svg \
+ qt/res/icons/icons_dark/status_connections_none.svg \
+ qt/res/icons/icons_dark/status_connections_normal.svg \
+ qt/res/icons/icons_dark/status_connections_poor.svg \
+ qt/res/icons/icons_dark/status_encryption_none.svg \
+ qt/res/icons/icons_dark/status_encryption_locked.svg \
+ qt/res/icons/icons_dark/status_encryption_unlocked.svg \
+ qt/res/icons/icons_dark/status_scraper_inactive.svg \
+ qt/res/icons/icons_dark/status_scraper_no_convergence.svg \
+ qt/res/icons/icons_dark/status_scraper_ok.svg \
+ qt/res/icons/icons_dark/status_scraper_waiting.svg \
+ qt/res/icons/icons_dark/status_staking_no.svg \
+ qt/res/icons/icons_dark/status_staking_problem.svg \
+ qt/res/icons/icons_dark/status_staking_yes.svg \
+ qt/res/icons/icons_dark/status_sync_done.svg \
+ qt/res/icons/icons_dark/status_sync_stalled.svg \
+ qt/res/icons/icons_dark/status_sync_syncing.svg \
qt/res/icons/icons_dark/transactions.svg \
qt/res/icons/icons_light/transactions.svg \
- qt/res/icons/icons_native/transactions.svg \
qt/res/icons/icons_light/chevron_down.svg \
qt/res/icons/icons_light/chevron_up.svg \
qt/res/icons/icons_dark/chevron_down.svg \
@@ -390,12 +435,10 @@ RES_IMAGES = \
RES_FONTS = \
qt/res/fonts/Inconsolata-Regular.ttf \
- qt/res/fonts/Inter-Bold.ttf \
- qt/res/fonts/Inter-Regular.ttf
+ qt/res/fonts/Inter-VariableFont.ttf
RES_STYLESHEETS = \
qt/res/stylesheets/light_stylesheet.qss \
- qt/res/stylesheets/native_stylesheet.qss \
qt/res/stylesheets/dark_stylesheet.qss
diff --git a/src/qt/bitcoin.cpp b/src/qt/bitcoin.cpp
index bfca9de0a2..acd317009b 100755
--- a/src/qt/bitcoin.cpp
+++ b/src/qt/bitcoin.cpp
@@ -560,9 +560,9 @@ int StartGridcoinQt(int argc, char *argv[], QApplication& app, OptionsModel& opt
WalletModel walletModel(pwalletMain, &optionsModel);
ResearcherModel researcherModel;
+ window.setResearcherModel(&researcherModel);
window.setClientModel(&clientModel);
window.setWalletModel(&walletModel);
- window.setResearcherModel(&researcherModel);
// If -min option passed, start window minimized.
if(GetBoolArg("-min"))
diff --git a/src/qt/bitcoin.qrc b/src/qt/bitcoin.qrc
index 9db02b2518..ce952cc27b 100644
--- a/src/qt/bitcoin.qrc
+++ b/src/qt/bitcoin.qrc
@@ -2,7 +2,7 @@
res/icons/quit.png
res/icons/transaction0.png
- res/icons/transaction2.png
+ res/icons/transaction2.svg
res/icons/transaction_conflicted.png
res/icons/clock1.png
res/icons/clock2.png
@@ -28,60 +28,140 @@
res/icons/tx_input.svg
res/icons/tx_pos.svg
res/icons/tx_output.svg
- res/icons/icons_native/overview.svg
- res/icons/icons_light/overview.svg
- res/icons/icons_dark/overview.svg
- res/icons/icons_native/Voting.svg
- res/icons/icons_native/address-book.svg
- res/icons/icons_native/lock_closed.svg
- res/icons/icons_native/lock_open.svg
- res/icons/icons_native/receive.svg
- res/icons/icons_native/send.svg
- res/icons/icons_light/Voting.svg
- res/icons/icons_light/address-book.svg
- res/icons/icons_light/lock_closed.svg
- res/icons/icons_light/lock_open.svg
- res/icons/icons_light/receive.svg
- res/icons/icons_light/send.svg
- res/icons/icons_dark/Voting.svg
- res/icons/icons_dark/address-book.svg
- res/icons/icons_dark/lock_closed.svg
- res/icons/icons_dark/lock_open.svg
- res/icons/icons_dark/receive.svg
- res/icons/icons_dark/send.svg
- res/icons/icons_dark/transactions.svg
- res/icons/icons_light/transactions.svg
- res/icons/icons_native/transactions.svg
+
+
+
+
+ res/icons/icons_light/sidebar_favorites_inactive.svg
+ res/icons/icons_light/sidebar_favorites_active.svg
+ res/icons/icons_light/sidebar_history_inactive.svg
+ res/icons/icons_light/sidebar_history_active.svg
+ res/icons/icons_light/sidebar_locked_inactive.svg
+ res/icons/icons_light/sidebar_locked_active.svg
+ res/icons/icons_light/sidebar_unlocked_inactive.svg
+ res/icons/icons_light/sidebar_unlocked_active.svg
+ res/icons/icons_light/sidebar_overview_inactive.svg
+ res/icons/icons_light/sidebar_overview_active.svg
+ res/icons/icons_light/sidebar_receive_inactive.svg
+ res/icons/icons_light/sidebar_receive_active.svg
+ res/icons/icons_light/sidebar_send_inactive.svg
+ res/icons/icons_light/sidebar_send_active.svg
+ res/icons/icons_light/sidebar_voting_inactive.svg
+ res/icons/icons_light/sidebar_voting_active.svg
+
+
+ res/icons/icons_light/status_beacon_green.svg
+ res/icons/icons_light/status_beacon_gray.svg
+ res/icons/icons_light/status_beacon_red.svg
+ res/icons/icons_light/status_beacon_yellow.svg
+
+
+ res/icons/icons_light/status_sync_done.svg
+ res/icons/icons_light/status_sync_stalled.svg
+ res/icons/icons_light/status_sync_syncing.svg
+
+
+ res/icons/icons_light/status_staking_no.svg
+ res/icons/icons_light/status_staking_problem.svg
+ res/icons/icons_light/status_staking_yes.svg
+
+
+ res/icons/icons_light/status_connections_none.svg
+ res/icons/icons_light/status_connections_poor.svg
+ res/icons/icons_light/status_connections_average.svg
+ res/icons/icons_light/status_connections_normal.svg
+ res/icons/icons_light/status_connections_good.svg
+
+
+ res/icons/icons_light/status_scraper_inactive.svg
+ res/icons/icons_light/status_scraper_no_convergence.svg
+ res/icons/icons_light/status_scraper_ok.svg
+ res/icons/icons_light/status_scraper_waiting.svg
+
+
+ res/icons/icons_light/status_encryption_locked.svg
+ res/icons/icons_light/status_encryption_none.svg
+ res/icons/icons_light/status_encryption_unlocked.svg
+
+
+ res/icons/icons_light/chevron_down.svg
+ res/icons/icons_light/chevron_up.svg
+
+
+
+
+ res/icons/icons_dark/sidebar_favorites_inactive.svg
+ res/icons/icons_dark/sidebar_favorites_active.svg
+ res/icons/icons_dark/sidebar_history_inactive.svg
+ res/icons/icons_dark/sidebar_history_active.svg
+ res/icons/icons_dark/sidebar_locked_inactive.svg
+ res/icons/icons_dark/sidebar_locked_active.svg
+ res/icons/icons_dark/sidebar_unlocked_inactive.svg
+ res/icons/icons_dark/sidebar_unlocked_active.svg
+ res/icons/icons_dark/sidebar_overview_inactive.svg
+ res/icons/icons_dark/sidebar_overview_active.svg
+ res/icons/icons_dark/sidebar_receive_inactive.svg
+ res/icons/icons_dark/sidebar_receive_active.svg
+ res/icons/icons_dark/sidebar_send_inactive.svg
+ res/icons/icons_dark/sidebar_send_active.svg
+ res/icons/icons_dark/sidebar_voting_inactive.svg
+ res/icons/icons_dark/sidebar_voting_active.svg
+
+
+ res/icons/icons_dark/status_beacon_green.svg
+ res/icons/icons_dark/status_beacon_gray.svg
+ res/icons/icons_dark/status_beacon_red.svg
+ res/icons/icons_dark/status_beacon_yellow.svg
+
+
+ res/icons/icons_dark/status_sync_done.svg
+ res/icons/icons_dark/status_sync_stalled.svg
+ res/icons/icons_dark/status_sync_syncing.svg
+
+
+ res/icons/icons_dark/status_staking_no.svg
+ res/icons/icons_dark/status_staking_problem.svg
+ res/icons/icons_dark/status_staking_yes.svg
+
+
+ res/icons/icons_dark/status_connections_none.svg
+ res/icons/icons_dark/status_connections_poor.svg
+ res/icons/icons_dark/status_connections_average.svg
+ res/icons/icons_dark/status_connections_normal.svg
+ res/icons/icons_dark/status_connections_good.svg
+
+
+ res/icons/icons_dark/status_scraper_inactive.svg
+ res/icons/icons_dark/status_scraper_no_convergence.svg
+ res/icons/icons_dark/status_scraper_ok.svg
+ res/icons/icons_dark/status_scraper_waiting.svg
+
+
+ res/icons/icons_dark/status_encryption_locked.svg
+ res/icons/icons_dark/status_encryption_none.svg
+ res/icons/icons_dark/status_encryption_unlocked.svg
+
+
+ res/icons/icons_dark/chevron_down.svg
+ res/icons/icons_dark/chevron_up.svg
+
res/icons/tx_pos_ss.svg
res/icons/tx_por.svg
res/icons/tx_por_ss.svg
- res/icons/beacon_green.svg
- res/icons/beacon_grey.svg
- res/icons/beacon_red.svg
- res/icons/beacon_yellow.svg
- res/icons/staking_off.svg
- res/icons/staking_on.svg
- res/icons/gray_scraper.svg
- res/icons/green_scraper.svg
- res/icons/connect0.svg
- res/icons/connect1.svg
- res/icons/connect2.svg
- res/icons/connect3.svg
- res/icons/connect4.svg
- res/icons/notsynced.svg
- res/icons/green_check.svg
res/icons/white_and_red_x.svg
- res/icons/staking_unable.svg
res/icons/superblock.svg
res/icons/warning.svg
res/icons/round_green_check.svg
res/icons/round_gray_x.svg
res/icons/tx_pos_ss_sent.svg
res/icons/tx_por_ss_sent.svg
+ res/icons/tx_contract_beacon.svg
+ res/icons/tx_contract_voting.svg
res/icons/message.svg
- res/icons/icons_light/chevron_down.svg
- res/icons/icons_light/chevron_up.svg
- res/icons/icons_dark/chevron_down.svg
res/images/splash3.png
@@ -101,13 +181,11 @@
res/fonts/Inconsolata-Regular.ttf
- res/fonts/Inter-Bold.ttf
- res/fonts/Inter-Regular.ttf
+ res/fonts/Inter-VariableFont.ttf
res/stylesheets/light_stylesheet.qss
- res/stylesheets/native_stylesheet.qss
res/stylesheets/dark_stylesheet.qss
diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp
index 2801c8baed..566d1f0524 100644
--- a/src/qt/bitcoingui.cpp
+++ b/src/qt/bitcoingui.cpp
@@ -109,8 +109,7 @@ BitcoinGUI::BitcoinGUI(QWidget *parent):
* 0.4,QDesktopWidget().availableGeometry(this)));
}
- QFontDatabase::addApplicationFont(":/fonts/inter-bold");
- QFontDatabase::addApplicationFont(":/fonts/inter-regular");
+ QFontDatabase::addApplicationFont(":/fonts/inter-variable");
QFontDatabase::addApplicationFont(":/fonts/inconsolata-regular");
#ifndef Q_OS_MAC
@@ -124,6 +123,21 @@ BitcoinGUI::BitcoinGUI(QWidget *parent):
qApp->setFont(appFont);
#endif
+ // Qt paints some decorations directly and provides no stylesheet hooks to
+ // customize appearance (for example: the rulers in a QWizardPage). We set
+ // certain application palette colors to fully-transparent to render these
+ // aspects invisible so that the painted features do not clash with visual
+ // designs of the application's themes. Important display elements provide
+ // the ability to customize appearances using stylesheets which override a
+ // palette set for the application, so we do not risk concealing the vital
+ // UI components, but consider removing the override to debug an obstinate
+ // display issue. This code must run before loading a stylesheet:
+ //
+ QPalette pal(qApp->palette());
+ pal.setColor(QPalette::Base, QColor(0, 0, 0, 0));
+ pal.setColor(QPalette::Mid, pal.color(QPalette::Base));
+ qApp->setPalette(pal);
+
setWindowTitle(tr("Gridcoin") + " " + tr("Wallet"));
#ifndef Q_OS_MAC
@@ -164,9 +178,17 @@ BitcoinGUI::BitcoinGUI(QWidget *parent):
vbox->addWidget(transactionView);
transactionsPage->setLayout(vbox);
- addressBookPage = new AddressBookPage(AddressBookPage::ForEditing, AddressBookPage::SendingTab);
+ addressBookPage = new QWidget(this);
+ addressBook = new AddressBookPage(AddressBookPage::ForEditing, AddressBookPage::SendingTab);
+ QVBoxLayout *addressBookPageLayout = new QVBoxLayout();
+ addressBookPageLayout->addWidget(addressBook);
+ addressBookPage->setLayout(addressBookPageLayout);
- receiveCoinsPage = new AddressBookPage(AddressBookPage::ForEditing, AddressBookPage::ReceivingTab);
+ receiveCoinsPage = new QWidget(this);
+ receiveAddressBook = new AddressBookPage(AddressBookPage::ForEditing, AddressBookPage::ReceivingTab);
+ QVBoxLayout *receiveCoinsPageLayout = new QVBoxLayout();
+ receiveCoinsPageLayout->addWidget(receiveAddressBook);
+ receiveCoinsPage->setLayout(receiveCoinsPageLayout);
sendCoinsPage = new SendCoinsDialog(this);
@@ -174,6 +196,11 @@ BitcoinGUI::BitcoinGUI(QWidget *parent):
signVerifyMessageDialog = new SignVerifyMessageDialog(this);
+ QVBoxLayout *centralVbox = new QVBoxLayout(this);
+ centralVbox->setContentsMargins(0, 0, 0, 0);
+ centralVbox->setSpacing(0);
+ centralVbox->addWidget(appMenuBar);
+
centralWidget = new QStackedWidget(this);
centralWidget->addWidget(overviewPage);
centralWidget->addWidget(transactionsPage);
@@ -181,10 +208,17 @@ BitcoinGUI::BitcoinGUI(QWidget *parent):
centralWidget->addWidget(receiveCoinsPage);
centralWidget->addWidget(sendCoinsPage);
centralWidget->addWidget(votingPage);
- setCentralWidget(centralWidget);
+ centralVbox->addWidget(centralWidget);
+
+ QWidget* centralWidgetWrapper = new QWidget(this);
+ centralWidgetWrapper->setLayout(centralVbox);
+ setCentralWidget(centralWidgetWrapper);
// Create status bar
- // statusBar();
+ statusBar();
+
+ // Disable size grip because it looks ugly and nobody needs it
+ statusBar()->setSizeGripEnabled(false);
// Clicking on a transaction on the overview page simply sends you to transaction history page
connect(overviewPage, SIGNAL(transactionClicked(QModelIndex)), this, SLOT(gotoHistoryPage()));
@@ -247,11 +281,19 @@ void BitcoinGUI::setOptionsStyleSheet(QString qssFileName)
qApp->setStyleSheet(sMainWindowHTML);
}
+
sSheet=qssFileName;
setIcons();
+
// reset encryption status to apply icon color changes
- if(walletModel)
+ if (walletModel) {
setEncryptionStatus(walletModel->getEncryptionStatus());
+ }
+
+ // Reapply the appropriate beacon icon color scheme:
+ if (researcherModel) {
+ researcherModel->setTheme(sSheet);
+ }
}
@@ -274,12 +316,12 @@ void BitcoinGUI::createActions()
receiveCoinsAction->setCheckable(true);
receiveCoinsAction->setShortcut(QKeySequence(Qt::ALT + Qt::Key_3));
- historyAction = new QAction(tr("&Transactions"), tabGroup);
+ historyAction = new QAction(tr("&History"), tabGroup);
historyAction->setToolTip(tr("Browse transaction history"));
historyAction->setCheckable(true);
historyAction->setShortcut(QKeySequence(Qt::ALT + Qt::Key_4));
- addressBookAction = new QAction(tr("&Address Book"), tabGroup);
+ addressBookAction = new QAction(tr("&Favorites"), tabGroup);
addressBookAction->setToolTip(tr("Edit the list of stored addresses and labels"));
addressBookAction->setCheckable(true);
addressBookAction->setShortcut(QKeySequence(Qt::ALT + Qt::Key_5));
@@ -394,17 +436,59 @@ void BitcoinGUI::createActions()
void BitcoinGUI::setIcons()
{
- overviewAction->setIcon(QPixmap(":/icons/overview_"+sSheet));
- sendCoinsAction->setIcon(QPixmap(":/icons/send_"+sSheet));
- receiveCoinsAction->setIcon(QPixmap(":/icons/receiving_addresses_"+sSheet));
- historyAction->setIcon(QPixmap(":/icons/history_"+sSheet));
- addressBookAction->setIcon(QPixmap(":/icons/address-book_"+sSheet));
- votingAction->setIcon(QPixmap(":/icons/voting_"+sSheet));
- unlockWalletAction->setIcon(QPixmap(":/icons/lock_open_"+sSheet));
- lockWalletAction->setIcon(QPixmap(":/icons/lock_closed_"+sSheet));
+ const QToolBar* toolbar = findChild();
+ const int toolbar_icon_size = 16 * logicalDpiX() / 96;
+
+ ToolbarButtonIconFilter::apply(
+ this,
+ overviewAction,
+ toolbar->widgetForAction(overviewAction),
+ toolbar_icon_size,
+ ":/icons/overview_" + sSheet);
+ ToolbarButtonIconFilter::apply(
+ this,
+ sendCoinsAction,
+ toolbar->widgetForAction(sendCoinsAction),
+ toolbar_icon_size,
+ ":/icons/send_" + sSheet);
+ ToolbarButtonIconFilter::apply(
+ this,
+ receiveCoinsAction,
+ toolbar->widgetForAction(receiveCoinsAction),
+ toolbar_icon_size,
+ ":/icons/receive_" + sSheet);
+ ToolbarButtonIconFilter::apply(
+ this,
+ historyAction,
+ toolbar->widgetForAction(historyAction),
+ toolbar_icon_size,
+ ":/icons/history_" + sSheet);
+ ToolbarButtonIconFilter::apply(
+ this,
+ addressBookAction,
+ toolbar->widgetForAction(addressBookAction),
+ toolbar_icon_size,
+ ":/icons/address-book_" + sSheet);
+ ToolbarButtonIconFilter::apply(
+ this,
+ votingAction,
+ toolbar->widgetForAction(votingAction),
+ toolbar_icon_size,
+ ":/icons/voting_" + sSheet);
+ ToolbarButtonIconFilter::apply(
+ this,
+ unlockWalletAction,
+ toolbar->widgetForAction(unlockWalletAction),
+ toolbar_icon_size,
+ ":/icons/lock_open_" + sSheet);
+ ToolbarButtonIconFilter::apply(
+ this,
+ lockWalletAction,
+ toolbar->widgetForAction(lockWalletAction),
+ toolbar_icon_size,
+ ":/icons/lock_closed_" + sSheet);
encryptWalletAction->setIcon(QPixmap(":/icons/lock_closed_"+sSheet));
-
bxAction->setIcon(QPixmap(":/icons/block"));
exchangeAction->setIcon(QPixmap(":/icons/ex"));
websiteAction->setIcon(QPixmap(":/icons/www"));
@@ -443,14 +527,13 @@ void BitcoinGUI::createMenuBar()
file->addAction(exportAction);
file->addAction(signMessageAction);
file->addAction(verifyMessageAction);
+ file->addSeparator();
if (!GetBoolArg("-testnet", false))
{
- file->addSeparator();
file->addAction(snapshotAction);
}
- file->addSeparator();
file->addAction(resetblockchainAction);
file->addSeparator();
@@ -486,6 +569,17 @@ void BitcoinGUI::createMenuBar()
void BitcoinGUI::createToolBars()
{
+ ClickLabel *logoLabel = new ClickLabel();
+ logoLabel->setObjectName("toolbarLogoLabel");
+ connect(logoLabel, SIGNAL(clicked()), this, SLOT(websiteClicked()));
+
+ QWidget *boincLabelSpacer = new QWidget();
+ boincLabelSpacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+
+ ClickLabel *boincLabel = new ClickLabel();
+ boincLabel->setObjectName("toolbarBoincLabel");
+ connect(logoLabel, SIGNAL(clicked()), this, SLOT(boincClicked()));
+
// "Tabs" toolbar (vertical, aligned on left side of overview screen).
QToolBar *toolbar = addToolBar("Tabs toolbar");
toolbar->setObjectName("toolbar");
@@ -494,43 +588,44 @@ void BitcoinGUI::createToolBars()
toolbar->setMovable(false);
toolbar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
toolbar->setContextMenuPolicy(Qt::PreventContextMenu);
- toolbar->setIconSize(QSize(50 * logicalDpiX() / 96, 25 * logicalDpiX() / 96));
+ // Setting a taller height than the rendered icon provides additional
+ // padding between the icon and the button text:
+ toolbar->setIconSize(QSize(16 * logicalDpiX() / 96, 24 * logicalDpiX() / 96));
+ toolbar->addWidget(logoLabel);
toolbar->addAction(overviewAction);
toolbar->addAction(sendCoinsAction);
toolbar->addAction(receiveCoinsAction);
toolbar->addAction(historyAction);
toolbar->addAction(addressBookAction);
toolbar->addAction(votingAction);
-
- QWidget* spacer = new QWidget();
- spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
- toolbar->addWidget(spacer);
- spacer->setObjectName("spacer");
- // Unlock Wallet
+ toolbar->addSeparator();
toolbar->addAction(unlockWalletAction);
toolbar->addAction(lockWalletAction);
+ toolbar->addWidget(boincLabelSpacer);
+ toolbar->addWidget(boincLabel);
+ toolbar->layout()->setAlignment(boincLabel, Qt::AlignHCenter | Qt::AlignBottom);
addToolBarBreak(Qt::LeftToolBarArea);
-
// Status bar notification icons (Status toolbar)
- QToolBar *toolbar2 = addToolBar("Status toolbar");
- addToolBar(Qt::LeftToolBarArea, toolbar2);
- toolbar2->setOrientation(Qt::Vertical);
- //toolbar2->setGeometry(0, 0, STATUSBAR_ICONSIZE, 0);
- toolbar2->setMinimumWidth(STATUSBAR_ICONSIZE);
- toolbar2->setContentsMargins(0, 0, 0, 0);
- toolbar2->setMovable(false);
- toolbar2->setObjectName("toolbar2");
-
QFrame *frameBlocks = new QFrame();
+ // Show a red label in the status bar for testnet:
+ if (GetBoolArg("-testnet")) {
+ QLabel *testnetLabel = new QLabel();
+ testnetLabel->setObjectName("testnetStatusLabel");
+ testnetLabel->setText("TESTNET");
+
+ statusBar()->addWidget(testnetLabel);
+ }
+
frameBlocks->setContentsMargins(0,0,0,0);
- frameBlocks->setMinimumWidth(STATUSBAR_ICONSIZE);
+ frameBlocks->setMinimumHeight(STATUSBAR_ICONSIZE);
- QVBoxLayout *frameBlocksLayout = new QVBoxLayout(frameBlocks);
- frameBlocksLayout->setContentsMargins(1,0,1,0);
- frameBlocksLayout->setSpacing(-1);
+ QHBoxLayout *frameBlocksLayout = new QHBoxLayout(frameBlocks);
+ frameBlocks->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred);
+ frameBlocksLayout->setContentsMargins(5, 0, 5, 0);
+ frameBlocksLayout->setSpacing(3);
labelEncryptionIcon = new QLabel();
labelStakingIcon = new QLabel();
labelConnectionsIcon = new ClickLabel();
@@ -540,12 +635,12 @@ void BitcoinGUI::createToolBars()
labelBeaconIcon = new ClickLabel();
connect(labelBeaconIcon, SIGNAL(clicked()), this, SLOT(researcherClicked()));
- frameBlocksLayout->addWidget(labelEncryptionIcon);
+ frameBlocksLayout->addWidget(labelBeaconIcon);
+ frameBlocksLayout->addWidget(labelBlocksIcon);
frameBlocksLayout->addWidget(labelStakingIcon);
frameBlocksLayout->addWidget(labelConnectionsIcon);
- frameBlocksLayout->addWidget(labelBlocksIcon);
frameBlocksLayout->addWidget(labelScraperIcon);
- frameBlocksLayout->addWidget(labelBeaconIcon);
+ frameBlocksLayout->addWidget(labelEncryptionIcon);
//12-21-2015 Prevent Lock from falling off the page
frameBlocksLayout->addStretch();
@@ -557,47 +652,13 @@ void BitcoinGUI::createToolBars()
timerStakingIcon->start(MODEL_UPDATE_DELAY);
// Instead of calling updateStakingIcon here, simply set the icon to staking off.
// This is to prevent problems since this GUI code can initialize before the core.
- labelStakingIcon->setPixmap(QIcon(":/icons/staking_off").pixmap(STATUSBAR_ICONSIZE, STATUSBAR_ICONSIZE));
+ labelStakingIcon->setPixmap(QIcon(":/icons/status_staking_no_" + sSheet).pixmap(STATUSBAR_ICONSIZE, STATUSBAR_ICONSIZE));
labelStakingIcon->setToolTip(tr("Not staking: Miner is not initialized."));
}
- toolbar2->addWidget(frameBlocks);
+ statusBar()->addPermanentWidget(frameBlocks);
addToolBarBreak(Qt::TopToolBarArea);
-
-
- // Top tool bar (clickable Gridcoin and BOINC logos)
- QToolBar *toolbar3 = addToolBar("Logo bar");
- addToolBar(Qt::TopToolBarArea, toolbar3);
- toolbar3->setOrientation(Qt::Horizontal);
- toolbar3->setMovable(false);
- toolbar3->setObjectName("toolbar3");
- ClickLabel *grcLogoLabel = new ClickLabel();
- grcLogoLabel->setObjectName("gridcoinLogoHorizontal");
- connect(grcLogoLabel, SIGNAL(clicked()), this, SLOT(websiteClicked()));
- toolbar3->addWidget(grcLogoLabel);
- QWidget* logoSpacer = new QWidget();
- logoSpacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
- toolbar3->addWidget(logoSpacer);
- logoSpacer->setObjectName("logoSpacer");
- ClickLabel *boincLogoLabel = new ClickLabel();
- boincLogoLabel->setObjectName("boincLogo");
- connect(boincLogoLabel, SIGNAL(clicked()), this, SLOT(boincClicked()));
- toolbar3->addWidget(boincLogoLabel);
-
- // Use a red color for the toolbars background if on testnet.
- if (GetBoolArg("-testnet"))
- {
- toolbar2->setStyleSheet("background-color:darkRed");
- toolbar3->setStyleSheet("background-color:darkRed");
- }
- else
- {
- toolbar2->setStyleSheet("background-color:rgb(65,0,127)");
- toolbar3->setStyleSheet("background-color:rgb(65,0,127)");
- }
-
-
}
void BitcoinGUI::setClientModel(ClientModel *clientModel)
@@ -625,6 +686,10 @@ void BitcoinGUI::setClientModel(ClientModel *clientModel)
aboutAction->setIcon(QPixmap(":/images/gridcoin_testnet"));
}
+ // set stylesheet
+ setOptionsStyleSheet(this->clientModel->getOptionsModel()->getCurrentStyle());
+ connect(this->clientModel->getOptionsModel(),SIGNAL(walletStylesheetChanged(QString)),this,SLOT(setOptionsStyleSheet(QString)));
+
// Keep up to date with client
setNumConnections(clientModel->getNumConnections());
connect(clientModel, SIGNAL(numConnectionsChanged(int)), this, SLOT(setNumConnections(int)));
@@ -639,13 +704,9 @@ void BitcoinGUI::setClientModel(ClientModel *clientModel)
// Report errors from network/worker thread
connect(clientModel, SIGNAL(error(QString,QString,bool)), this, SLOT(error(QString,QString,bool)));
- // set stylesheet
- setOptionsStyleSheet(this->clientModel->getOptionsModel()->getCurrentStyle());
- connect(this->clientModel->getOptionsModel(),SIGNAL(walletStylesheetChanged(QString)),this,SLOT(setOptionsStyleSheet(QString)));
-
rpcConsole->setClientModel(clientModel);
- addressBookPage->setOptionsModel(clientModel->getOptionsModel());
- receiveCoinsPage->setOptionsModel(clientModel->getOptionsModel());
+ addressBook->setOptionsModel(clientModel->getOptionsModel());
+ receiveAddressBook->setOptionsModel(clientModel->getOptionsModel());
}
}
@@ -665,8 +726,8 @@ void BitcoinGUI::setWalletModel(WalletModel *walletModel)
transactionView->setModel(walletModel);
overviewPage->setWalletModel(walletModel);
- addressBookPage->setModel(walletModel->getAddressTableModel());
- receiveCoinsPage->setModel(walletModel->getAddressTableModel());
+ addressBook->setModel(walletModel->getAddressTableModel());
+ receiveAddressBook->setModel(walletModel->getAddressTableModel());
sendCoinsPage->setModel(walletModel);
votingPage->setModel(walletModel);
signVerifyMessageDialog->setModel(walletModel);
@@ -814,16 +875,19 @@ void BitcoinGUI::setNumConnections(int n)
QString icon;
switch (n)
{
- case 0: icon = ":/icons/connect_0"; break;
- case 1: case 2: case 3: icon = ":/icons/connect_1"; break;
- case 4: case 5: case 6: icon = ":/icons/connect_2"; break;
- case 7: case 8: case 9: icon = ":/icons/connect_3"; break;
- default: icon = ":/icons/connect_4"; break;
+ case 0: icon = ":/icons/status_connection_0"; break;
+ case 1: case 2: icon = ":/icons/status_connection_1"; break;
+ case 3: case 4: case 5: icon = ":/icons/status_connection_2"; break;
+ case 6: case 7: case 8: case 9: icon = ":/icons/status_connection_3"; break;
+ default: icon = ":/icons/status_connection_4"; break;
}
+
+ icon.append("_").append(sSheet);
labelConnectionsIcon->setPixmap(QIcon(icon).pixmap(STATUSBAR_ICONSIZE,STATUSBAR_ICONSIZE));
if (n == 0)
{
+ setNumBlocks(0, 0); // Counts don't matter--just make it red
labelConnectionsIcon->setToolTip(tr("No active connections to the Gridcoin network. "
"If this persists more than a few minutes, please check your configuration "
"and your network connectivity."));
@@ -839,6 +903,8 @@ void BitcoinGUI::setNumBlocks(int count, int nTotalBlocks)
// return if we have no connection to the network
if (!clientModel || clientModel->getNumConnections() == 0)
{
+ labelBlocksIcon->setPixmap(QIcon(":/icons/status_sync_stalled_" + sSheet).pixmap(STATUSBAR_ICONSIZE, STATUSBAR_ICONSIZE));
+ labelBlocksIcon->setToolTip(tr("Sync: no connections."));
return;
}
@@ -875,13 +941,13 @@ void BitcoinGUI::setNumBlocks(int count, int nTotalBlocks)
if(secs < 90*60 && count >= nTotalBlocks)
{
tooltip = tr("Up to date") + QString(".
") + tooltip;
- labelBlocksIcon->setPixmap(QIcon(":/icons/synced").pixmap(STATUSBAR_ICONSIZE, STATUSBAR_ICONSIZE));
+ labelBlocksIcon->setPixmap(QIcon(":/icons/status_sync_done_" + sSheet).pixmap(STATUSBAR_ICONSIZE, STATUSBAR_ICONSIZE));
overviewPage->showOutOfSyncWarning(false);
}
else
{
- labelBlocksIcon->setPixmap(QIcon(":/icons/notsynced").pixmap(STATUSBAR_ICONSIZE, STATUSBAR_ICONSIZE));
+ labelBlocksIcon->setPixmap(QIcon(":/icons/status_sync_syncing_" + sSheet).pixmap(STATUSBAR_ICONSIZE, STATUSBAR_ICONSIZE));
tooltip = tr("Catching up...") + QString("
") + tooltip;
overviewPage->showOutOfSyncWarning(true);
@@ -1165,7 +1231,7 @@ void BitcoinGUI::gotoAddressBookPage()
exportAction->setEnabled(true);
disconnect(exportAction, SIGNAL(triggered()), 0, 0);
- connect(exportAction, SIGNAL(triggered()), addressBookPage, SLOT(exportClicked()));
+ connect(exportAction, SIGNAL(triggered()), addressBook, SLOT(exportClicked()));
}
void BitcoinGUI::gotoReceiveCoinsPage()
@@ -1175,7 +1241,7 @@ void BitcoinGUI::gotoReceiveCoinsPage()
exportAction->setEnabled(true);
disconnect(exportAction, SIGNAL(triggered()), 0, 0);
- connect(exportAction, SIGNAL(triggered()), receiveCoinsPage, SLOT(exportClicked()));
+ connect(exportAction, SIGNAL(triggered()), receiveAddressBook, SLOT(exportClicked()));
}
void BitcoinGUI::gotoSendCoinsPage()
@@ -1190,7 +1256,6 @@ void BitcoinGUI::gotoSendCoinsPage()
void BitcoinGUI::gotoVotingPage()
{
votingAction->setChecked(true);
- //votingPage->loadPolls(false);
centralWidget->setCurrentWidget(votingPage);
exportAction->setEnabled(false);
@@ -1261,7 +1326,8 @@ void BitcoinGUI::setEncryptionStatus(int status)
switch(status)
{
case WalletModel::Unencrypted:
- labelEncryptionIcon->hide();
+ labelEncryptionIcon->setPixmap(QIcon(":/icons/status_encryption_none_" + sSheet).pixmap(STATUSBAR_ICONSIZE,STATUSBAR_ICONSIZE));
+ labelEncryptionIcon->setToolTip(tr("Wallet is not encrypted!"));
encryptWalletAction->setChecked(false);
changePassphraseAction->setEnabled(false);
unlockWalletAction->setVisible(false);
@@ -1269,8 +1335,11 @@ void BitcoinGUI::setEncryptionStatus(int status)
encryptWalletAction->setEnabled(true);
break;
case WalletModel::Unlocked:
- labelEncryptionIcon->show();
- labelEncryptionIcon->setPixmap(QIcon(":/icons/lock_open_"+sSheet).pixmap(STATUSBAR_ICONSIZE,STATUSBAR_ICONSIZE));
+ if (fWalletUnlockStakingOnly) {
+ labelEncryptionIcon->setPixmap(QIcon(":/icons/status_encryption_unlocked_" + sSheet).pixmap(STATUSBAR_ICONSIZE,STATUSBAR_ICONSIZE));
+ } else {
+ labelEncryptionIcon->setPixmap(QIcon(":/icons/status_encryption_none_" + sSheet).pixmap(STATUSBAR_ICONSIZE,STATUSBAR_ICONSIZE));
+ }
labelEncryptionIcon->setToolTip(tr("Wallet is encrypted and currently %1 ").arg(fWalletUnlockStakingOnly ? tr("unlocked for staking only") : tr("fully unlocked")));
encryptWalletAction->setChecked(true);
changePassphraseAction->setEnabled(true);
@@ -1279,8 +1348,7 @@ void BitcoinGUI::setEncryptionStatus(int status)
encryptWalletAction->setEnabled(false); // TODO: decrypt currently not supported
break;
case WalletModel::Locked:
- labelEncryptionIcon->show();
- labelEncryptionIcon->setPixmap(QIcon(":/icons/lock_closed_"+sSheet).pixmap(STATUSBAR_ICONSIZE,STATUSBAR_ICONSIZE));
+ labelEncryptionIcon->setPixmap(QIcon(":/icons/status_encryption_locked_" + sSheet).pixmap(STATUSBAR_ICONSIZE,STATUSBAR_ICONSIZE));
labelEncryptionIcon->setToolTip(tr("Wallet is encrypted and currently locked"));
encryptWalletAction->setChecked(true);
changePassphraseAction->setEnabled(true);
@@ -1465,7 +1533,7 @@ void BitcoinGUI::updateStakingIcon()
if (globalStatus.staking)
{
- labelStakingIcon->setPixmap(QIcon(":/icons/staking_on").pixmap(STATUSBAR_ICONSIZE, STATUSBAR_ICONSIZE));
+ labelStakingIcon->setPixmap(QIcon(":/icons/status_staking_yes_" + sSheet).pixmap(STATUSBAR_ICONSIZE, STATUSBAR_ICONSIZE));
labelStakingIcon->setToolTip(tr("Staking.
Your weight is %1
Network weight is %2
Estimated staking frequency is %3.")
.arg(QString::number(globalStatus.coinWeight, 'f', 0))
.arg(QString::number(globalStatus.netWeight, 'f', 0))
@@ -1482,7 +1550,7 @@ void BitcoinGUI::updateStakingIcon()
}
else if (!globalStatus.staking && !globalStatus.able_to_stake)
{
- labelStakingIcon->setPixmap(QIcon(":/icons/staking_unable").pixmap(STATUSBAR_ICONSIZE, STATUSBAR_ICONSIZE));
+ labelStakingIcon->setPixmap(QIcon(":/icons/status_staking_problem_" + sSheet).pixmap(STATUSBAR_ICONSIZE, STATUSBAR_ICONSIZE));
//Part of this string won't be translated :(
labelStakingIcon->setToolTip(tr("Unable to stake: %1")
.arg(QString(globalStatus.ReasonNotStaking.c_str())));
@@ -1498,7 +1566,7 @@ void BitcoinGUI::updateStakingIcon()
}
else
{
- labelStakingIcon->setPixmap(QIcon(":/icons/staking_off").pixmap(STATUSBAR_ICONSIZE, STATUSBAR_ICONSIZE));
+ labelStakingIcon->setPixmap(QIcon(":/icons/status_staking_no_" + sSheet).pixmap(STATUSBAR_ICONSIZE, STATUSBAR_ICONSIZE));
//Part of this string won't be translated :(
labelStakingIcon->setToolTip(tr("Not staking currently: %1, Estimated staking frequency is %2.")
.arg(QString(globalStatus.ReasonNotStaking.c_str()))
@@ -1573,23 +1641,23 @@ void BitcoinGUI::updateScraperIcon(int scraperEventtype, int status)
if (scraperEventtype == (int)scrapereventtypes::OutOfSync && status == CT_UPDATING)
{
- labelScraperIcon->setPixmap(QIcon(":/icons/notsynced").pixmap(STATUSBAR_ICONSIZE, STATUSBAR_ICONSIZE));
+ labelScraperIcon->setPixmap(QIcon(":/icons/status_scraper_waiting_" + sSheet).pixmap(STATUSBAR_ICONSIZE, STATUSBAR_ICONSIZE));
labelScraperIcon->setToolTip(tr("Scraper: waiting on wallet to sync."));
}
else if (scraperEventtype == (int)scrapereventtypes::Sleep && status == CT_NEW)
{
- labelScraperIcon->setPixmap(QIcon(":/icons/gray_scraper").pixmap(STATUSBAR_ICONSIZE, STATUSBAR_ICONSIZE));
+ labelScraperIcon->setPixmap(QIcon(":/icons/status_scraper_inactive_" + sSheet).pixmap(STATUSBAR_ICONSIZE, STATUSBAR_ICONSIZE));
labelScraperIcon->setToolTip(tr("Scraper: superblock not needed - inactive."));
}
else if (scraperEventtype == (int)scrapereventtypes::Stats && (status == CT_NEW || status == CT_UPDATED || status == CT_UPDATING))
{
- labelScraperIcon->setPixmap(QIcon(":/icons/notsynced").pixmap(STATUSBAR_ICONSIZE, STATUSBAR_ICONSIZE));
+ labelScraperIcon->setPixmap(QIcon(":/icons/status_scraper_waiting_" + sSheet).pixmap(STATUSBAR_ICONSIZE, STATUSBAR_ICONSIZE));
labelScraperIcon->setToolTip(tr("Scraper: downloading and processing stats."));
}
else if ((scraperEventtype == (int)scrapereventtypes::Convergence || scraperEventtype == (int)scrapereventtypes::SBContract)
&& (status == CT_NEW || status == CT_UPDATED) && nConvergenceTime)
{
- labelScraperIcon->setPixmap(QIcon(":/icons/green_scraper").pixmap(STATUSBAR_ICONSIZE, STATUSBAR_ICONSIZE));
+ labelScraperIcon->setPixmap(QIcon(":/icons/status_scraper_ok_" + sSheet).pixmap(STATUSBAR_ICONSIZE, STATUSBAR_ICONSIZE));
if (bDisplayScrapers)
{
@@ -1615,7 +1683,7 @@ void BitcoinGUI::updateScraperIcon(int scraperEventtype, int status)
else if ((scraperEventtype == (int)scrapereventtypes::Convergence || scraperEventtype == (int)scrapereventtypes::SBContract)
&& status == CT_DELETED)
{
- labelScraperIcon->setPixmap(QIcon(":/icons/white_and_red_x").pixmap(STATUSBAR_ICONSIZE, STATUSBAR_ICONSIZE));
+ labelScraperIcon->setPixmap(QIcon(":/icons/status_scraper_no_convergence_" + sSheet).pixmap(STATUSBAR_ICONSIZE, STATUSBAR_ICONSIZE));
labelScraperIcon->setToolTip(tr("Scraper: No convergence able to be achieved. Will retry in a few minutes."));
}
@@ -1646,3 +1714,60 @@ void BitcoinGUI::updateBeaconIcon()
.arg(researcherModel->formatTimeToBeaconExpiration())
.arg(researcherModel->formatBeaconStatus()));
}
+
+// -----------------------------------------------------------------------------
+// Class: ToolbarButtonIconFilter
+// -----------------------------------------------------------------------------
+
+ToolbarButtonIconFilter::ToolbarButtonIconFilter(
+ QObject* parent,
+ QIcon resting_icon,
+ QIcon hover_icon)
+ : QObject(parent)
+ , m_resting_icon(std::move(resting_icon))
+ , m_hover_icon(std::move(hover_icon))
+{
+}
+
+void ToolbarButtonIconFilter::apply(
+ QObject* parent,
+ QAction* tool_action,
+ QWidget* tool_button,
+ const int icon_size,
+ const QString& base_icon_path)
+{
+ const QPixmap inactive_pixmap = QIcon(base_icon_path).pixmap(icon_size, icon_size);
+ const QPixmap active_pixmap = QIcon(base_icon_path + "_active").pixmap(icon_size, icon_size);
+
+ QIcon hover_icon(active_pixmap);
+ QIcon resting_icon;
+ resting_icon.addPixmap(inactive_pixmap, QIcon::Normal, QIcon::Off);
+ resting_icon.addPixmap(active_pixmap, QIcon::Normal, QIcon::On);
+
+ tool_action->setIcon(resting_icon);
+ tool_button->installEventFilter(new ToolbarButtonIconFilter(
+ parent,
+ std::move(resting_icon),
+ std::move(hover_icon)));
+}
+
+bool ToolbarButtonIconFilter::eventFilter(QObject* target, QEvent* event)
+{
+ QToolButton* button = qobject_cast(target);
+
+ if (!button || button->isChecked()) {
+ return false;
+ }
+
+ if (event->type() == QEvent::Enter) {
+ button->setIcon(m_hover_icon);
+ return true;
+ }
+
+ if (event->type() == QEvent::Leave) {
+ button->setIcon(m_resting_icon);
+ return true;
+ }
+
+ return false;
+}
diff --git a/src/qt/bitcoingui.h b/src/qt/bitcoingui.h
index 771ba376ea..f9a32b5110 100644
--- a/src/qt/bitcoingui.h
+++ b/src/qt/bitcoingui.h
@@ -79,8 +79,8 @@ class BitcoinGUI : public QMainWindow
OverviewPage *overviewPage;
QWidget *transactionsPage;
- AddressBookPage *addressBookPage;
- AddressBookPage *receiveCoinsPage;
+ QWidget *addressBookPage;
+ QWidget *receiveCoinsPage;
SendCoinsDialog *sendCoinsPage;
VotingDialog *votingPage;
SignVerifyMessageDialog *signVerifyMessageDialog;
@@ -128,6 +128,8 @@ class BitcoinGUI : public QMainWindow
QMenu *trayIconMenu;
Notificator *notificator;
TransactionView *transactionView;
+ AddressBookPage *addressBook;
+ AddressBookPage *receiveAddressBook;
RPCConsole *rpcConsole;
DiagnosticsDialog *diagnosticsDialog;
@@ -263,4 +265,34 @@ private slots:
void updateGlobalStatus();
};
+//!
+//! \brief Sets up and toggles hover states for the main toolbar icons.
+//!
+//! Qt stylesheets do not provide a way to manage QToolButton resting, active
+//! and hover states for the button icons in a way that scales for a high-DPI
+//! desktop. This class provides an event filter implementation that switches
+//! the tool button icons in response to hover events.
+//!
+class ToolbarButtonIconFilter : public QObject
+{
+ Q_OBJECT
+
+public:
+ explicit ToolbarButtonIconFilter(QObject* parent, QIcon resting_icon, QIcon hover_icon);
+ virtual ~ToolbarButtonIconFilter() { }
+
+ static void apply(
+ QObject* parent,
+ QAction* tool_action,
+ QWidget* tool_button,
+ const int icon_size,
+ const QString& base_icon_path);
+
+ bool eventFilter(QObject* watched, QEvent* event) override;
+
+private:
+ QIcon m_resting_icon;
+ QIcon m_hover_icon;
+}; // ToolbarButtonIconFilter
+
#endif
diff --git a/src/qt/forms/addressbookpage.ui b/src/qt/forms/addressbookpage.ui
index 06659e4a4a..07c016ab55 100644
--- a/src/qt/forms/addressbookpage.ui
+++ b/src/qt/forms/addressbookpage.ui
@@ -47,6 +47,9 @@
QAbstractItemView::SelectRows
+
+ false
+
true
diff --git a/src/qt/forms/overviewpage.ui b/src/qt/forms/overviewpage.ui
index 9a27155c90..319cf0007b 100644
--- a/src/qt/forms/overviewpage.ui
+++ b/src/qt/forms/overviewpage.ui
@@ -39,10 +39,10 @@
6
- -
+
-
-
+
0
0
@@ -535,7 +535,7 @@
- :/icons/warning
+ :/icons/warning
true
@@ -576,25 +576,25 @@
+ -
+
+
+ Qt::Vertical
+
+
+ QSizePolicy::Expanding
+
+
+
+ 20
+ 10000
+
+
+
+
- -
-
-
- Qt::Vertical
-
-
- QSizePolicy::MinimumExpanding
-
-
-
- 20
- 20
-
-
-
-
-
@@ -775,8 +775,6 @@
-
-
-
+
diff --git a/src/qt/forms/researcherwizardbeaconpage.ui b/src/qt/forms/researcherwizardbeaconpage.ui
index 09c6d22cce..b076108f24 100644
--- a/src/qt/forms/researcherwizardbeaconpage.ui
+++ b/src/qt/forms/researcherwizardbeaconpage.ui
@@ -65,9 +65,6 @@
-
- :/icons/beacon_grey
-
true
@@ -201,7 +198,7 @@
- :/icons/synced
+ :/icons/round_green_check
true
diff --git a/src/qt/forms/researcherwizardpoolsummarypage.ui b/src/qt/forms/researcherwizardpoolsummarypage.ui
index 19529892a3..cc9a84e639 100644
--- a/src/qt/forms/researcherwizardpoolsummarypage.ui
+++ b/src/qt/forms/researcherwizardpoolsummarypage.ui
@@ -264,7 +264,7 @@
QAbstractItemView::SelectRows
- true
+ false
Qt::SolidLine
diff --git a/src/qt/forms/researcherwizardprojectspage.ui b/src/qt/forms/researcherwizardprojectspage.ui
index dbf81a937f..7808c7a5b2 100644
--- a/src/qt/forms/researcherwizardprojectspage.ui
+++ b/src/qt/forms/researcherwizardprojectspage.ui
@@ -56,7 +56,7 @@
QAbstractItemView::SelectRows
- true
+ false
Qt::SolidLine
diff --git a/src/qt/forms/researcherwizardsummarypage.ui b/src/qt/forms/researcherwizardsummarypage.ui
index 0a95056716..d4e744588e 100644
--- a/src/qt/forms/researcherwizardsummarypage.ui
+++ b/src/qt/forms/researcherwizardsummarypage.ui
@@ -65,7 +65,7 @@
20
- 20
+ 10
@@ -152,7 +152,7 @@
- :/icons/synced
+ :/icons/round_green_check
true
@@ -281,7 +281,7 @@
- :/images/ic_solo_active
+ :/images/ic_solo_active
true
@@ -455,9 +455,6 @@
-
- :/icons/beacon_grey
-
true
@@ -790,7 +787,7 @@
- :/icons/white_and_red_x
+ :/icons/white_and_red_x
true
@@ -859,7 +856,7 @@
QAbstractItemView::SelectRows
- true
+ false
Qt::SolidLine
@@ -893,8 +890,6 @@
-
-
-
+
diff --git a/src/qt/forms/rpcconsole.ui b/src/qt/forms/rpcconsole.ui
index f2b64d9a1e..2b4ff8be2c 100755
--- a/src/qt/forms/rpcconsole.ui
+++ b/src/qt/forms/rpcconsole.ui
@@ -712,6 +712,12 @@
false
+
+ true
+
+
+ false
+
true
@@ -767,6 +773,12 @@
false
+
+ true
+
+
+ false
+
true
diff --git a/src/qt/forms/sendcoinsentry.ui b/src/qt/forms/sendcoinsentry.ui
index 1e714bbb42..f9bb87325e 100644
--- a/src/qt/forms/sendcoinsentry.ui
+++ b/src/qt/forms/sendcoinsentry.ui
@@ -13,12 +13,6 @@
Form
-
- QFrame::StyledPanel
-
-
- QFrame::Sunken
-
12
diff --git a/src/qt/forms/signverifymessagedialog.ui b/src/qt/forms/signverifymessagedialog.ui
index e6e8bfd883..bbd86e4b67 100644
--- a/src/qt/forms/signverifymessagedialog.ui
+++ b/src/qt/forms/signverifymessagedialog.ui
@@ -43,7 +43,7 @@
-
- 0
+ 5
-
@@ -59,7 +59,7 @@
-
-
+
Choose an address from the address book
@@ -67,19 +67,16 @@
-
- :/icons/address-book:/icons/address-book
+
+ :/icons/address-book_light:/icons/address-book_light
Alt+A
-
- false
-
-
-
+
Paste address from clipboard
@@ -93,9 +90,6 @@
Alt+P
-
- false
-
@@ -110,7 +104,7 @@
-
- 0
+ 5
-
@@ -123,7 +117,7 @@
-
-
+
Copy the current signature to the system clipboard
@@ -134,9 +128,6 @@
:/icons/editcopy:/icons/editcopy
-
- false
-
@@ -241,7 +232,7 @@
-
- 0
+ 5
-
@@ -257,7 +248,7 @@
-
-
+
Choose an address from the address book
@@ -265,15 +256,12 @@
-
- :/icons/address-book:/icons/address-book
+
+ :/icons/address-book_light:/icons/address-book_light
Alt+A
-
- false
-
diff --git a/src/qt/optionsdialog.cpp b/src/qt/optionsdialog.cpp
index 85745a860b..c2b582065e 100644
--- a/src/qt/optionsdialog.cpp
+++ b/src/qt/optionsdialog.cpp
@@ -73,9 +73,8 @@ OptionsDialog::OptionsDialog(QWidget *parent) :
ui->unit->setModel(new BitcoinUnits(this));
- ui->styleComboBox->addItem(tr("Light"),QVariant("light"));
- ui->styleComboBox->addItem(tr("Dark"),QVariant("dark"));
- ui->styleComboBox->addItem(tr("Native"),QVariant("native"));
+ ui->styleComboBox->addItem(tr("Dark"), QVariant("dark"));
+ ui->styleComboBox->addItem(tr("Light"), QVariant("light"));
/* Widget-to-option mapper */
diff --git a/src/qt/optionsmodel.cpp b/src/qt/optionsmodel.cpp
index 840539641e..a75287463d 100644
--- a/src/qt/optionsmodel.cpp
+++ b/src/qt/optionsmodel.cpp
@@ -53,7 +53,7 @@ void OptionsModel::Init()
limitTxnDate = settings.value("limitTxnDate", QDate()).toDate();
nReserveBalance = settings.value("nReserveBalance").toLongLong();
language = settings.value("language", "").toString();
- walletStylesheet = settings.value("walletStylesheet", "light").toString();
+ walletStylesheet = settings.value("walletStylesheet", "dark").toString();
// These are shared with core Bitcoin; we want
// command-line options to override the GUI settings:
@@ -123,12 +123,12 @@ QVariant OptionsModel::data(const QModelIndex & index, int role) const
return QVariant((qint64) nReserveBalance);
case DisplayUnit:
return QVariant(nDisplayUnit);
- case DisplayAddresses:
+ case DisplayAddresses:
return QVariant(bDisplayAddresses);
case Language:
return settings.value("language", "");
case WalletStylesheet:
- return settings.value("walletStylesheet", "light");
+ return settings.value("walletStylesheet", "dark");
case CoinControlFeatures:
return QVariant(fCoinControlFeatures);
case LimitTxnDisplay:
@@ -232,9 +232,9 @@ bool OptionsModel::setData(const QModelIndex & index, const QVariant & value, in
settings.setValue("nDisplayUnit", nDisplayUnit);
emit displayUnitChanged(nDisplayUnit);
break;
- case DisplayAddresses:
- bDisplayAddresses = value.toBool();
- settings.setValue("bDisplayAddresses", bDisplayAddresses);
+ case DisplayAddresses:
+ bDisplayAddresses = value.toBool();
+ settings.setValue("bDisplayAddresses", bDisplayAddresses);
break;
case Language:
settings.setValue("language", value);
@@ -339,13 +339,18 @@ int OptionsModel::getDisplayUnit()
return nDisplayUnit;
}
-bool OptionsModel::getDisplayAddresses()
-{
- return bDisplayAddresses;
+bool OptionsModel::getDisplayAddresses()
+{
+ return bDisplayAddresses;
}
QString OptionsModel::getCurrentStyle()
{
+ // Native stylesheet removed for now:
+ if (walletStylesheet == "native") {
+ return "dark";
+ }
+
return walletStylesheet;
}
diff --git a/src/qt/overviewpage.cpp b/src/qt/overviewpage.cpp
index 533cc290d4..265a39febb 100644
--- a/src/qt/overviewpage.cpp
+++ b/src/qt/overviewpage.cpp
@@ -128,7 +128,6 @@ OverviewPage::OverviewPage(QWidget *parent) :
QRect verticalSpacerSpacing(0, 0, 20, 20 * this->logicalDpiY() / 96);
ui->verticalSpacer->setGeometry(verticalSpacerSpacing);
ui->researcherSectionVerticalSpacer->setGeometry(verticalSpacerSpacing);
- ui->verticalSpacer_2->setGeometry(verticalSpacerSpacing);
// Recent transactions
ui->listTransactions->setItemDelegate(txdelegate);
diff --git a/src/qt/res/fonts/Inter-Bold.ttf b/src/qt/res/fonts/Inter-Bold.ttf
deleted file mode 100644
index 847ffd191b..0000000000
Binary files a/src/qt/res/fonts/Inter-Bold.ttf and /dev/null differ
diff --git a/src/qt/res/fonts/Inter-Regular.ttf b/src/qt/res/fonts/Inter-Regular.ttf
deleted file mode 100644
index 3b7e686e54..0000000000
Binary files a/src/qt/res/fonts/Inter-Regular.ttf and /dev/null differ
diff --git a/src/qt/res/fonts/Inter-VariableFont.ttf b/src/qt/res/fonts/Inter-VariableFont.ttf
new file mode 100644
index 0000000000..3b642151ed
Binary files /dev/null and b/src/qt/res/fonts/Inter-VariableFont.ttf differ
diff --git a/src/qt/res/icons/beacon_green.svg b/src/qt/res/icons/beacon_green.svg
deleted file mode 100755
index 3e984eeadd..0000000000
--- a/src/qt/res/icons/beacon_green.svg
+++ /dev/null
@@ -1,106 +0,0 @@
-
-
diff --git a/src/qt/res/icons/beacon_grey.svg b/src/qt/res/icons/beacon_grey.svg
deleted file mode 100755
index b6497992f0..0000000000
--- a/src/qt/res/icons/beacon_grey.svg
+++ /dev/null
@@ -1,96 +0,0 @@
-
-
diff --git a/src/qt/res/icons/beacon_red.svg b/src/qt/res/icons/beacon_red.svg
deleted file mode 100755
index 53863edbc5..0000000000
--- a/src/qt/res/icons/beacon_red.svg
+++ /dev/null
@@ -1,106 +0,0 @@
-
-
diff --git a/src/qt/res/icons/beacon_yellow.svg b/src/qt/res/icons/beacon_yellow.svg
deleted file mode 100755
index ca09fe0cd4..0000000000
--- a/src/qt/res/icons/beacon_yellow.svg
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
diff --git a/src/qt/res/icons/gray_scraper.svg b/src/qt/res/icons/gray_scraper.svg
deleted file mode 100755
index 1fcfec46a0..0000000000
--- a/src/qt/res/icons/gray_scraper.svg
+++ /dev/null
@@ -1,64 +0,0 @@
-
-
diff --git a/src/qt/res/icons/green_check.svg b/src/qt/res/icons/green_check.svg
deleted file mode 100755
index befa76b85c..0000000000
--- a/src/qt/res/icons/green_check.svg
+++ /dev/null
@@ -1,55 +0,0 @@
-
-
-
-
-]>
-
diff --git a/src/qt/res/icons/green_scraper.svg b/src/qt/res/icons/green_scraper.svg
deleted file mode 100755
index 4a2d9cc927..0000000000
--- a/src/qt/res/icons/green_scraper.svg
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
diff --git a/src/qt/res/icons/icons_dark/sidebar_favorites_active.svg b/src/qt/res/icons/icons_dark/sidebar_favorites_active.svg
new file mode 100644
index 0000000000..fb9f0509c1
--- /dev/null
+++ b/src/qt/res/icons/icons_dark/sidebar_favorites_active.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/qt/res/icons/icons_dark/sidebar_favorites_inactive.svg b/src/qt/res/icons/icons_dark/sidebar_favorites_inactive.svg
new file mode 100644
index 0000000000..97193305e7
--- /dev/null
+++ b/src/qt/res/icons/icons_dark/sidebar_favorites_inactive.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/qt/res/icons/icons_dark/sidebar_history_active.svg b/src/qt/res/icons/icons_dark/sidebar_history_active.svg
new file mode 100644
index 0000000000..a2e1f932f1
--- /dev/null
+++ b/src/qt/res/icons/icons_dark/sidebar_history_active.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/qt/res/icons/icons_dark/sidebar_history_inactive.svg b/src/qt/res/icons/icons_dark/sidebar_history_inactive.svg
new file mode 100644
index 0000000000..c95f70a137
--- /dev/null
+++ b/src/qt/res/icons/icons_dark/sidebar_history_inactive.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/qt/res/icons/icons_dark/sidebar_locked_active.svg b/src/qt/res/icons/icons_dark/sidebar_locked_active.svg
new file mode 100644
index 0000000000..c131b6f61e
--- /dev/null
+++ b/src/qt/res/icons/icons_dark/sidebar_locked_active.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/qt/res/icons/icons_dark/sidebar_locked_inactive.svg b/src/qt/res/icons/icons_dark/sidebar_locked_inactive.svg
new file mode 100644
index 0000000000..0c66323d1b
--- /dev/null
+++ b/src/qt/res/icons/icons_dark/sidebar_locked_inactive.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/qt/res/icons/icons_dark/sidebar_overview_active.svg b/src/qt/res/icons/icons_dark/sidebar_overview_active.svg
new file mode 100644
index 0000000000..0b33cd3244
--- /dev/null
+++ b/src/qt/res/icons/icons_dark/sidebar_overview_active.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/qt/res/icons/icons_dark/sidebar_overview_inactive.svg b/src/qt/res/icons/icons_dark/sidebar_overview_inactive.svg
new file mode 100644
index 0000000000..abdfb03bd6
--- /dev/null
+++ b/src/qt/res/icons/icons_dark/sidebar_overview_inactive.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/qt/res/icons/icons_dark/sidebar_receive_active.svg b/src/qt/res/icons/icons_dark/sidebar_receive_active.svg
new file mode 100644
index 0000000000..1eeb2fc6bc
--- /dev/null
+++ b/src/qt/res/icons/icons_dark/sidebar_receive_active.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/qt/res/icons/icons_dark/sidebar_receive_inactive.svg b/src/qt/res/icons/icons_dark/sidebar_receive_inactive.svg
new file mode 100644
index 0000000000..fcf9ba8719
--- /dev/null
+++ b/src/qt/res/icons/icons_dark/sidebar_receive_inactive.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/qt/res/icons/icons_dark/sidebar_send_active.svg b/src/qt/res/icons/icons_dark/sidebar_send_active.svg
new file mode 100644
index 0000000000..65e15adc3e
--- /dev/null
+++ b/src/qt/res/icons/icons_dark/sidebar_send_active.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/qt/res/icons/icons_dark/sidebar_send_inactive.svg b/src/qt/res/icons/icons_dark/sidebar_send_inactive.svg
new file mode 100644
index 0000000000..d9513289ac
--- /dev/null
+++ b/src/qt/res/icons/icons_dark/sidebar_send_inactive.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/qt/res/icons/icons_dark/sidebar_unlocked_active.svg b/src/qt/res/icons/icons_dark/sidebar_unlocked_active.svg
new file mode 100644
index 0000000000..ab79a7a091
--- /dev/null
+++ b/src/qt/res/icons/icons_dark/sidebar_unlocked_active.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/qt/res/icons/icons_dark/sidebar_unlocked_inactive.svg b/src/qt/res/icons/icons_dark/sidebar_unlocked_inactive.svg
new file mode 100644
index 0000000000..ad565cad36
--- /dev/null
+++ b/src/qt/res/icons/icons_dark/sidebar_unlocked_inactive.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/qt/res/icons/icons_dark/sidebar_voting_active.svg b/src/qt/res/icons/icons_dark/sidebar_voting_active.svg
new file mode 100644
index 0000000000..b0b4bf419e
--- /dev/null
+++ b/src/qt/res/icons/icons_dark/sidebar_voting_active.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/qt/res/icons/icons_dark/sidebar_voting_inactive.svg b/src/qt/res/icons/icons_dark/sidebar_voting_inactive.svg
new file mode 100644
index 0000000000..7c1c411cef
--- /dev/null
+++ b/src/qt/res/icons/icons_dark/sidebar_voting_inactive.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/qt/res/icons/icons_dark/status_beacon_gray.svg b/src/qt/res/icons/icons_dark/status_beacon_gray.svg
new file mode 100644
index 0000000000..56a3279ff5
--- /dev/null
+++ b/src/qt/res/icons/icons_dark/status_beacon_gray.svg
@@ -0,0 +1,7 @@
+
diff --git a/src/qt/res/icons/icons_dark/status_beacon_green.svg b/src/qt/res/icons/icons_dark/status_beacon_green.svg
new file mode 100644
index 0000000000..f7bd7de822
--- /dev/null
+++ b/src/qt/res/icons/icons_dark/status_beacon_green.svg
@@ -0,0 +1,14 @@
+
diff --git a/src/qt/res/icons/icons_dark/status_beacon_red.svg b/src/qt/res/icons/icons_dark/status_beacon_red.svg
new file mode 100644
index 0000000000..3e95687c37
--- /dev/null
+++ b/src/qt/res/icons/icons_dark/status_beacon_red.svg
@@ -0,0 +1,7 @@
+
diff --git a/src/qt/res/icons/icons_dark/status_beacon_yellow.svg b/src/qt/res/icons/icons_dark/status_beacon_yellow.svg
new file mode 100644
index 0000000000..d5dd341cc4
--- /dev/null
+++ b/src/qt/res/icons/icons_dark/status_beacon_yellow.svg
@@ -0,0 +1,14 @@
+
diff --git a/src/qt/res/icons/icons_dark/status_connections_average.svg b/src/qt/res/icons/icons_dark/status_connections_average.svg
new file mode 100644
index 0000000000..82de7793ed
--- /dev/null
+++ b/src/qt/res/icons/icons_dark/status_connections_average.svg
@@ -0,0 +1,8 @@
+
diff --git a/src/qt/res/icons/icons_dark/status_connections_good.svg b/src/qt/res/icons/icons_dark/status_connections_good.svg
new file mode 100644
index 0000000000..6c26b912b0
--- /dev/null
+++ b/src/qt/res/icons/icons_dark/status_connections_good.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/qt/res/icons/icons_dark/status_connections_none.svg b/src/qt/res/icons/icons_dark/status_connections_none.svg
new file mode 100644
index 0000000000..21d27d69c6
--- /dev/null
+++ b/src/qt/res/icons/icons_dark/status_connections_none.svg
@@ -0,0 +1,9 @@
+
diff --git a/src/qt/res/icons/icons_dark/status_connections_normal.svg b/src/qt/res/icons/icons_dark/status_connections_normal.svg
new file mode 100644
index 0000000000..5561b4b717
--- /dev/null
+++ b/src/qt/res/icons/icons_dark/status_connections_normal.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/qt/res/icons/icons_dark/status_connections_poor.svg b/src/qt/res/icons/icons_dark/status_connections_poor.svg
new file mode 100644
index 0000000000..dc09ab73a8
--- /dev/null
+++ b/src/qt/res/icons/icons_dark/status_connections_poor.svg
@@ -0,0 +1,8 @@
+
diff --git a/src/qt/res/icons/icons_dark/status_encryption_locked.svg b/src/qt/res/icons/icons_dark/status_encryption_locked.svg
new file mode 100644
index 0000000000..07520365d5
--- /dev/null
+++ b/src/qt/res/icons/icons_dark/status_encryption_locked.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/qt/res/icons/icons_dark/status_encryption_none.svg b/src/qt/res/icons/icons_dark/status_encryption_none.svg
new file mode 100644
index 0000000000..fdc84cb50a
--- /dev/null
+++ b/src/qt/res/icons/icons_dark/status_encryption_none.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/qt/res/icons/icons_dark/status_encryption_unlocked.svg b/src/qt/res/icons/icons_dark/status_encryption_unlocked.svg
new file mode 100644
index 0000000000..deb789895a
--- /dev/null
+++ b/src/qt/res/icons/icons_dark/status_encryption_unlocked.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/qt/res/icons/icons_dark/status_scraper_inactive.svg b/src/qt/res/icons/icons_dark/status_scraper_inactive.svg
new file mode 100644
index 0000000000..eed7a104e9
--- /dev/null
+++ b/src/qt/res/icons/icons_dark/status_scraper_inactive.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/qt/res/icons/icons_dark/status_scraper_no_convergence.svg b/src/qt/res/icons/icons_dark/status_scraper_no_convergence.svg
new file mode 100644
index 0000000000..0f2a2742e7
--- /dev/null
+++ b/src/qt/res/icons/icons_dark/status_scraper_no_convergence.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/qt/res/icons/icons_dark/status_scraper_ok.svg b/src/qt/res/icons/icons_dark/status_scraper_ok.svg
new file mode 100644
index 0000000000..68d43aa5c7
--- /dev/null
+++ b/src/qt/res/icons/icons_dark/status_scraper_ok.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/qt/res/icons/icons_dark/status_scraper_waiting.svg b/src/qt/res/icons/icons_dark/status_scraper_waiting.svg
new file mode 100644
index 0000000000..ebf5438a43
--- /dev/null
+++ b/src/qt/res/icons/icons_dark/status_scraper_waiting.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/qt/res/icons/icons_dark/status_staking_no.svg b/src/qt/res/icons/icons_dark/status_staking_no.svg
new file mode 100644
index 0000000000..11442fe376
--- /dev/null
+++ b/src/qt/res/icons/icons_dark/status_staking_no.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/qt/res/icons/icons_dark/status_staking_problem.svg b/src/qt/res/icons/icons_dark/status_staking_problem.svg
new file mode 100644
index 0000000000..c95102b923
--- /dev/null
+++ b/src/qt/res/icons/icons_dark/status_staking_problem.svg
@@ -0,0 +1 @@
+
diff --git a/src/qt/res/icons/icons_dark/status_staking_yes.svg b/src/qt/res/icons/icons_dark/status_staking_yes.svg
new file mode 100644
index 0000000000..fb44cceefe
--- /dev/null
+++ b/src/qt/res/icons/icons_dark/status_staking_yes.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/qt/res/icons/icons_dark/status_sync_done.svg b/src/qt/res/icons/icons_dark/status_sync_done.svg
new file mode 100644
index 0000000000..9fbe197480
--- /dev/null
+++ b/src/qt/res/icons/icons_dark/status_sync_done.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/qt/res/icons/icons_dark/status_sync_stalled.svg b/src/qt/res/icons/icons_dark/status_sync_stalled.svg
new file mode 100644
index 0000000000..1683352d6b
--- /dev/null
+++ b/src/qt/res/icons/icons_dark/status_sync_stalled.svg
@@ -0,0 +1 @@
+
diff --git a/src/qt/res/icons/icons_dark/status_sync_syncing.svg b/src/qt/res/icons/icons_dark/status_sync_syncing.svg
new file mode 100644
index 0000000000..c7cea578cf
--- /dev/null
+++ b/src/qt/res/icons/icons_dark/status_sync_syncing.svg
@@ -0,0 +1 @@
+
diff --git a/src/qt/res/icons/icons_light/sidebar_favorites_active.svg b/src/qt/res/icons/icons_light/sidebar_favorites_active.svg
new file mode 100644
index 0000000000..97193305e7
--- /dev/null
+++ b/src/qt/res/icons/icons_light/sidebar_favorites_active.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/qt/res/icons/icons_light/sidebar_favorites_inactive.svg b/src/qt/res/icons/icons_light/sidebar_favorites_inactive.svg
new file mode 100644
index 0000000000..d95ed661fc
--- /dev/null
+++ b/src/qt/res/icons/icons_light/sidebar_favorites_inactive.svg
@@ -0,0 +1 @@
+
diff --git a/src/qt/res/icons/icons_light/sidebar_history_active.svg b/src/qt/res/icons/icons_light/sidebar_history_active.svg
new file mode 100644
index 0000000000..c95f70a137
--- /dev/null
+++ b/src/qt/res/icons/icons_light/sidebar_history_active.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/qt/res/icons/icons_light/sidebar_history_inactive.svg b/src/qt/res/icons/icons_light/sidebar_history_inactive.svg
new file mode 100644
index 0000000000..1a8f4fd122
--- /dev/null
+++ b/src/qt/res/icons/icons_light/sidebar_history_inactive.svg
@@ -0,0 +1 @@
+
diff --git a/src/qt/res/icons/icons_light/sidebar_locked_active.svg b/src/qt/res/icons/icons_light/sidebar_locked_active.svg
new file mode 100644
index 0000000000..0c66323d1b
--- /dev/null
+++ b/src/qt/res/icons/icons_light/sidebar_locked_active.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/qt/res/icons/icons_light/sidebar_locked_inactive.svg b/src/qt/res/icons/icons_light/sidebar_locked_inactive.svg
new file mode 100644
index 0000000000..e99ab48924
--- /dev/null
+++ b/src/qt/res/icons/icons_light/sidebar_locked_inactive.svg
@@ -0,0 +1 @@
+
diff --git a/src/qt/res/icons/icons_light/sidebar_overview_active.svg b/src/qt/res/icons/icons_light/sidebar_overview_active.svg
new file mode 100644
index 0000000000..abdfb03bd6
--- /dev/null
+++ b/src/qt/res/icons/icons_light/sidebar_overview_active.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/qt/res/icons/icons_light/sidebar_overview_inactive.svg b/src/qt/res/icons/icons_light/sidebar_overview_inactive.svg
new file mode 100644
index 0000000000..7a4a18dac7
--- /dev/null
+++ b/src/qt/res/icons/icons_light/sidebar_overview_inactive.svg
@@ -0,0 +1 @@
+
diff --git a/src/qt/res/icons/icons_light/sidebar_receive_active.svg b/src/qt/res/icons/icons_light/sidebar_receive_active.svg
new file mode 100644
index 0000000000..fcf9ba8719
--- /dev/null
+++ b/src/qt/res/icons/icons_light/sidebar_receive_active.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/qt/res/icons/icons_light/sidebar_receive_inactive.svg b/src/qt/res/icons/icons_light/sidebar_receive_inactive.svg
new file mode 100644
index 0000000000..91fc2684c9
--- /dev/null
+++ b/src/qt/res/icons/icons_light/sidebar_receive_inactive.svg
@@ -0,0 +1 @@
+
diff --git a/src/qt/res/icons/icons_light/sidebar_send_active.svg b/src/qt/res/icons/icons_light/sidebar_send_active.svg
new file mode 100644
index 0000000000..d9513289ac
--- /dev/null
+++ b/src/qt/res/icons/icons_light/sidebar_send_active.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/qt/res/icons/icons_light/sidebar_send_inactive.svg b/src/qt/res/icons/icons_light/sidebar_send_inactive.svg
new file mode 100644
index 0000000000..eaab28b289
--- /dev/null
+++ b/src/qt/res/icons/icons_light/sidebar_send_inactive.svg
@@ -0,0 +1 @@
+
diff --git a/src/qt/res/icons/icons_light/sidebar_unlocked_active.svg b/src/qt/res/icons/icons_light/sidebar_unlocked_active.svg
new file mode 100644
index 0000000000..ad565cad36
--- /dev/null
+++ b/src/qt/res/icons/icons_light/sidebar_unlocked_active.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/qt/res/icons/icons_light/sidebar_unlocked_inactive.svg b/src/qt/res/icons/icons_light/sidebar_unlocked_inactive.svg
new file mode 100644
index 0000000000..f710854d0b
--- /dev/null
+++ b/src/qt/res/icons/icons_light/sidebar_unlocked_inactive.svg
@@ -0,0 +1 @@
+
diff --git a/src/qt/res/icons/icons_light/sidebar_voting_active.svg b/src/qt/res/icons/icons_light/sidebar_voting_active.svg
new file mode 100644
index 0000000000..7c1c411cef
--- /dev/null
+++ b/src/qt/res/icons/icons_light/sidebar_voting_active.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/qt/res/icons/icons_light/sidebar_voting_inactive.svg b/src/qt/res/icons/icons_light/sidebar_voting_inactive.svg
new file mode 100644
index 0000000000..b3357b457d
--- /dev/null
+++ b/src/qt/res/icons/icons_light/sidebar_voting_inactive.svg
@@ -0,0 +1 @@
+
diff --git a/src/qt/res/icons/icons_light/status_beacon_gray.svg b/src/qt/res/icons/icons_light/status_beacon_gray.svg
new file mode 100644
index 0000000000..9e0979d8e6
--- /dev/null
+++ b/src/qt/res/icons/icons_light/status_beacon_gray.svg
@@ -0,0 +1,7 @@
+
diff --git a/src/qt/res/icons/icons_light/status_beacon_green.svg b/src/qt/res/icons/icons_light/status_beacon_green.svg
new file mode 100644
index 0000000000..0f55289004
--- /dev/null
+++ b/src/qt/res/icons/icons_light/status_beacon_green.svg
@@ -0,0 +1,14 @@
+
diff --git a/src/qt/res/icons/icons_light/status_beacon_red.svg b/src/qt/res/icons/icons_light/status_beacon_red.svg
new file mode 100644
index 0000000000..3e95687c37
--- /dev/null
+++ b/src/qt/res/icons/icons_light/status_beacon_red.svg
@@ -0,0 +1,7 @@
+
diff --git a/src/qt/res/icons/icons_light/status_beacon_yellow.svg b/src/qt/res/icons/icons_light/status_beacon_yellow.svg
new file mode 100644
index 0000000000..cabd5152ad
--- /dev/null
+++ b/src/qt/res/icons/icons_light/status_beacon_yellow.svg
@@ -0,0 +1,14 @@
+
diff --git a/src/qt/res/icons/icons_light/status_connections_average.svg b/src/qt/res/icons/icons_light/status_connections_average.svg
new file mode 100644
index 0000000000..552438ceca
--- /dev/null
+++ b/src/qt/res/icons/icons_light/status_connections_average.svg
@@ -0,0 +1,8 @@
+
diff --git a/src/qt/res/icons/icons_light/status_connections_good.svg b/src/qt/res/icons/icons_light/status_connections_good.svg
new file mode 100644
index 0000000000..a2b31b53c2
--- /dev/null
+++ b/src/qt/res/icons/icons_light/status_connections_good.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/qt/res/icons/icons_light/status_connections_none.svg b/src/qt/res/icons/icons_light/status_connections_none.svg
new file mode 100644
index 0000000000..a5fecfbcb3
--- /dev/null
+++ b/src/qt/res/icons/icons_light/status_connections_none.svg
@@ -0,0 +1,9 @@
+
diff --git a/src/qt/res/icons/icons_light/status_connections_normal.svg b/src/qt/res/icons/icons_light/status_connections_normal.svg
new file mode 100644
index 0000000000..e24b3f4e59
--- /dev/null
+++ b/src/qt/res/icons/icons_light/status_connections_normal.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/qt/res/icons/icons_light/status_connections_poor.svg b/src/qt/res/icons/icons_light/status_connections_poor.svg
new file mode 100644
index 0000000000..dc09ab73a8
--- /dev/null
+++ b/src/qt/res/icons/icons_light/status_connections_poor.svg
@@ -0,0 +1,8 @@
+
diff --git a/src/qt/res/icons/icons_light/status_encryption_locked.svg b/src/qt/res/icons/icons_light/status_encryption_locked.svg
new file mode 100644
index 0000000000..529b4a1f9a
--- /dev/null
+++ b/src/qt/res/icons/icons_light/status_encryption_locked.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/qt/res/icons/icons_light/status_encryption_none.svg b/src/qt/res/icons/icons_light/status_encryption_none.svg
new file mode 100644
index 0000000000..fdc84cb50a
--- /dev/null
+++ b/src/qt/res/icons/icons_light/status_encryption_none.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/qt/res/icons/icons_light/status_encryption_unlocked.svg b/src/qt/res/icons/icons_light/status_encryption_unlocked.svg
new file mode 100644
index 0000000000..1380174796
--- /dev/null
+++ b/src/qt/res/icons/icons_light/status_encryption_unlocked.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/qt/res/icons/icons_light/status_scraper_inactive.svg b/src/qt/res/icons/icons_light/status_scraper_inactive.svg
new file mode 100644
index 0000000000..d9b4f0ba65
--- /dev/null
+++ b/src/qt/res/icons/icons_light/status_scraper_inactive.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/qt/res/icons/icons_light/status_scraper_no_convergence.svg b/src/qt/res/icons/icons_light/status_scraper_no_convergence.svg
new file mode 100644
index 0000000000..0f2a2742e7
--- /dev/null
+++ b/src/qt/res/icons/icons_light/status_scraper_no_convergence.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/qt/res/icons/icons_light/status_scraper_ok.svg b/src/qt/res/icons/icons_light/status_scraper_ok.svg
new file mode 100644
index 0000000000..eed7a104e9
--- /dev/null
+++ b/src/qt/res/icons/icons_light/status_scraper_ok.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/qt/res/icons/icons_light/status_scraper_waiting.svg b/src/qt/res/icons/icons_light/status_scraper_waiting.svg
new file mode 100644
index 0000000000..ebf5438a43
--- /dev/null
+++ b/src/qt/res/icons/icons_light/status_scraper_waiting.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/qt/res/icons/icons_light/status_staking_no.svg b/src/qt/res/icons/icons_light/status_staking_no.svg
new file mode 100644
index 0000000000..1919e4bcf5
--- /dev/null
+++ b/src/qt/res/icons/icons_light/status_staking_no.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/qt/res/icons/icons_light/status_staking_problem.svg b/src/qt/res/icons/icons_light/status_staking_problem.svg
new file mode 100644
index 0000000000..c95102b923
--- /dev/null
+++ b/src/qt/res/icons/icons_light/status_staking_problem.svg
@@ -0,0 +1 @@
+
diff --git a/src/qt/res/icons/icons_light/status_staking_yes.svg b/src/qt/res/icons/icons_light/status_staking_yes.svg
new file mode 100644
index 0000000000..11442fe376
--- /dev/null
+++ b/src/qt/res/icons/icons_light/status_staking_yes.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/qt/res/icons/icons_light/status_sync_done.svg b/src/qt/res/icons/icons_light/status_sync_done.svg
new file mode 100644
index 0000000000..9fbe197480
--- /dev/null
+++ b/src/qt/res/icons/icons_light/status_sync_done.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/qt/res/icons/icons_light/status_sync_stalled.svg b/src/qt/res/icons/icons_light/status_sync_stalled.svg
new file mode 100644
index 0000000000..1683352d6b
--- /dev/null
+++ b/src/qt/res/icons/icons_light/status_sync_stalled.svg
@@ -0,0 +1 @@
+
diff --git a/src/qt/res/icons/icons_light/status_sync_syncing.svg b/src/qt/res/icons/icons_light/status_sync_syncing.svg
new file mode 100644
index 0000000000..c7cea578cf
--- /dev/null
+++ b/src/qt/res/icons/icons_light/status_sync_syncing.svg
@@ -0,0 +1 @@
+
diff --git a/src/qt/res/icons/icons_native/address-book.svg b/src/qt/res/icons/icons_native/address-book.svg
deleted file mode 100644
index 1938e43e40..0000000000
--- a/src/qt/res/icons/icons_native/address-book.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/src/qt/res/icons/icons_native/lock_closed.svg b/src/qt/res/icons/icons_native/lock_closed.svg
deleted file mode 100644
index 728bb2ac43..0000000000
--- a/src/qt/res/icons/icons_native/lock_closed.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/src/qt/res/icons/icons_native/lock_open.svg b/src/qt/res/icons/icons_native/lock_open.svg
deleted file mode 100644
index 2cda9a38eb..0000000000
--- a/src/qt/res/icons/icons_native/lock_open.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/src/qt/res/icons/icons_native/overview.svg b/src/qt/res/icons/icons_native/overview.svg
deleted file mode 100644
index ddbfd8a1e9..0000000000
--- a/src/qt/res/icons/icons_native/overview.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/src/qt/res/icons/icons_native/receive.svg b/src/qt/res/icons/icons_native/receive.svg
deleted file mode 100644
index 423917e1f6..0000000000
--- a/src/qt/res/icons/icons_native/receive.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/src/qt/res/icons/icons_native/send.svg b/src/qt/res/icons/icons_native/send.svg
deleted file mode 100644
index 0642a1e780..0000000000
--- a/src/qt/res/icons/icons_native/send.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/src/qt/res/icons/icons_native/transactions.svg b/src/qt/res/icons/icons_native/transactions.svg
deleted file mode 100644
index 12b2992f23..0000000000
--- a/src/qt/res/icons/icons_native/transactions.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/src/qt/res/icons/notsynced.svg b/src/qt/res/icons/notsynced.svg
deleted file mode 100755
index 8d3f17a5a7..0000000000
--- a/src/qt/res/icons/notsynced.svg
+++ /dev/null
@@ -1,86 +0,0 @@
-
-
diff --git a/src/qt/res/icons/staking_off.svg b/src/qt/res/icons/staking_off.svg
deleted file mode 100755
index 014225057f..0000000000
--- a/src/qt/res/icons/staking_off.svg
+++ /dev/null
@@ -1,132 +0,0 @@
-
-
\ No newline at end of file
diff --git a/src/qt/res/icons/staking_on.svg b/src/qt/res/icons/staking_on.svg
deleted file mode 100755
index 85e7374ea1..0000000000
--- a/src/qt/res/icons/staking_on.svg
+++ /dev/null
@@ -1,110 +0,0 @@
-
-
\ No newline at end of file
diff --git a/src/qt/res/icons/staking_unable.svg b/src/qt/res/icons/staking_unable.svg
deleted file mode 100644
index 8cbd8bc5e2..0000000000
--- a/src/qt/res/icons/staking_unable.svg
+++ /dev/null
@@ -1,132 +0,0 @@
-
-
\ No newline at end of file
diff --git a/src/qt/res/icons/transaction2.png b/src/qt/res/icons/transaction2.png
deleted file mode 100644
index 8a804b05ac..0000000000
Binary files a/src/qt/res/icons/transaction2.png and /dev/null differ
diff --git a/src/qt/res/icons/transaction2.svg b/src/qt/res/icons/transaction2.svg
new file mode 100644
index 0000000000..9fa23557ae
--- /dev/null
+++ b/src/qt/res/icons/transaction2.svg
@@ -0,0 +1,4 @@
+
diff --git a/src/qt/res/icons/tx_contract_beacon.svg b/src/qt/res/icons/tx_contract_beacon.svg
new file mode 100644
index 0000000000..b1a0095a1d
--- /dev/null
+++ b/src/qt/res/icons/tx_contract_beacon.svg
@@ -0,0 +1,7 @@
+
diff --git a/src/qt/res/icons/icons_native/Voting.svg b/src/qt/res/icons/tx_contract_voting.svg
similarity index 100%
rename from src/qt/res/icons/icons_native/Voting.svg
rename to src/qt/res/icons/tx_contract_voting.svg
diff --git a/src/qt/res/images/boinc_logo_white.svg b/src/qt/res/images/boinc_logo_white.svg
index 6a6a68c68c..a5ee85273d 100644
--- a/src/qt/res/images/boinc_logo_white.svg
+++ b/src/qt/res/images/boinc_logo_white.svg
@@ -1,88 +1,10 @@
-
-
-