From 5db81053ef081a04431bd87ca0e84649780b7bfe Mon Sep 17 00:00:00 2001 From: Jakub Rojek Date: Wed, 4 Nov 2015 19:25:04 +0100 Subject: [PATCH] Menu Toolbar version 1.1 --- src/qt/bitcoin.qrc | 17 +++ src/qt/bitcoingui.cpp | 85 +++++++++++++- src/qt/bitcoingui.h | 8 ++ src/qt/gui20_skin.cpp | 28 +++++ src/qt/gui20_skin.h | 69 ++++++++++++ .../cpp/guimenutoolbarcontrol.cpp | 70 ++++++++++++ .../cpp/guimenutoolbarcontrol.h | 44 ++++++++ .../cpp/guimenutoolbarlistview.cpp | 47 ++++++++ .../cpp/guimenutoolbarlistview.h | 36 ++++++ .../cpp/guimenutoolbarwidget.cpp | 106 ++++++++++++++++++ .../cpp/guimenutoolbarwidget.h | 34 ++++++ .../qtquick_controls/cpp/qmlimageprovider.cpp | 3 +- .../cpp/qmlmenutoolbaritem.cpp | 37 ++++++ .../qtquick_controls/cpp/qmlmenutoolbaritem.h | 36 ++++++ .../cpp/qmlmenutoolbarmodel.cpp | 15 +++ .../cpp/qmlmenutoolbarmodel.h | 16 +++ .../qml/QmlGUIBannerWindow.qml | 1 - .../qml/QmlGUIMenuToolbarControl.qml | 57 ++++++++++ .../qml/QmlGUIMenuToolbarListView.qml | 79 +++++++++++++ .../qml/QmlGUIMenuToolbarWindow.qml | 14 +++ .../res/icons/GUI20_mainToolBar_contacts.png | Bin 0 -> 632 bytes .../GUI20_mainToolBar_contacts_hover.png | Bin 0 -> 383 bytes src/qt/res/icons/GUI20_mainToolBar_info.png | Bin 0 -> 2091 bytes .../icons/GUI20_mainToolBar_info_hover.png | Bin 0 -> 969 bytes .../res/icons/GUI20_mainToolBar_overview.png | Bin 0 -> 2412 bytes .../GUI20_mainToolBar_overview_hover.png | Bin 0 -> 1088 bytes .../res/icons/GUI20_mainToolBar_receive.png | Bin 0 -> 1166 bytes .../icons/GUI20_mainToolBar_receive_hover.png | Bin 0 -> 591 bytes .../icons/GUI20_mainToolBar_redeemprypto.png | Bin 0 -> 4892 bytes .../GUI20_mainToolBar_redeemprypto_hover.png | Bin 0 -> 1954 bytes src/qt/res/icons/GUI20_mainToolBar_send.png | Bin 0 -> 1067 bytes .../icons/GUI20_mainToolBar_send_hover.png | Bin 0 -> 607 bytes .../icons/GUI20_mainToolBar_transactions.png | Bin 0 -> 1185 bytes .../GUI20_mainToolBar_transactions_hover.png | Bin 0 -> 563 bytes 34 files changed, 794 insertions(+), 8 deletions(-) create mode 100644 src/qt/gui20_skin.cpp create mode 100644 src/qt/gui20_skin.h create mode 100644 src/qt/qtquick_controls/cpp/guimenutoolbarcontrol.cpp create mode 100644 src/qt/qtquick_controls/cpp/guimenutoolbarcontrol.h create mode 100644 src/qt/qtquick_controls/cpp/guimenutoolbarlistview.cpp create mode 100644 src/qt/qtquick_controls/cpp/guimenutoolbarlistview.h create mode 100644 src/qt/qtquick_controls/cpp/guimenutoolbarwidget.cpp create mode 100644 src/qt/qtquick_controls/cpp/guimenutoolbarwidget.h create mode 100644 src/qt/qtquick_controls/cpp/qmlmenutoolbaritem.cpp create mode 100644 src/qt/qtquick_controls/cpp/qmlmenutoolbaritem.h create mode 100644 src/qt/qtquick_controls/cpp/qmlmenutoolbarmodel.cpp create mode 100644 src/qt/qtquick_controls/cpp/qmlmenutoolbarmodel.h create mode 100644 src/qt/qtquick_controls/qml/QmlGUIMenuToolbarControl.qml create mode 100644 src/qt/qtquick_controls/qml/QmlGUIMenuToolbarListView.qml create mode 100644 src/qt/qtquick_controls/qml/QmlGUIMenuToolbarWindow.qml create mode 100644 src/qt/res/icons/GUI20_mainToolBar_contacts.png create mode 100644 src/qt/res/icons/GUI20_mainToolBar_contacts_hover.png create mode 100644 src/qt/res/icons/GUI20_mainToolBar_info.png create mode 100644 src/qt/res/icons/GUI20_mainToolBar_info_hover.png create mode 100644 src/qt/res/icons/GUI20_mainToolBar_overview.png create mode 100644 src/qt/res/icons/GUI20_mainToolBar_overview_hover.png create mode 100644 src/qt/res/icons/GUI20_mainToolBar_receive.png create mode 100644 src/qt/res/icons/GUI20_mainToolBar_receive_hover.png create mode 100644 src/qt/res/icons/GUI20_mainToolBar_redeemprypto.png create mode 100644 src/qt/res/icons/GUI20_mainToolBar_redeemprypto_hover.png create mode 100644 src/qt/res/icons/GUI20_mainToolBar_send.png create mode 100644 src/qt/res/icons/GUI20_mainToolBar_send_hover.png create mode 100644 src/qt/res/icons/GUI20_mainToolBar_transactions.png create mode 100644 src/qt/res/icons/GUI20_mainToolBar_transactions_hover.png diff --git a/src/qt/bitcoin.qrc b/src/qt/bitcoin.qrc index 2daf3c0..983f92a 100644 --- a/src/qt/bitcoin.qrc +++ b/src/qt/bitcoin.qrc @@ -44,6 +44,20 @@ res/icons/adverts_arrow_left_hover.png res/icons/adverts_arrow_right.png res/icons/adverts_arrow_right_hover.png + res/icons/GUI20_mainToolBar_transactions.png + res/icons/GUI20_mainToolBar_transactions_hover.png + res/icons/GUI20_mainToolBar_send.png + res/icons/GUI20_mainToolBar_send_hover.png + res/icons/GUI20_mainToolBar_redeemprypto.png + res/icons/GUI20_mainToolBar_redeemprypto_hover.png + res/icons/GUI20_mainToolBar_receive.png + res/icons/GUI20_mainToolBar_receive_hover.png + res/icons/GUI20_mainToolBar_overview.png + res/icons/GUI20_mainToolBar_overview_hover.png + res/icons/GUI20_mainToolBar_info.png + res/icons/GUI20_mainToolBar_info_hover.png + res/icons/GUI20_mainToolBar_contacts.png + res/icons/GUI20_mainToolBar_contacts_hover.png res/images/about.png @@ -107,5 +121,8 @@ qtquick_controls/qml/QmlGUIBannerControl.qml qtquick_controls/qml/QmlGUIBannerListView.qml qtquick_controls/qml/QmlGUIBannerWindow.qml + qtquick_controls/qml/QmlGUIMenuToolbarWindow.qml + qtquick_controls/qml/QmlGUIMenuToolbarListView.qml + qtquick_controls/qml/QmlGUIMenuToolbarControl.qml diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp index 1a1a044..8933034 100644 --- a/src/qt/bitcoingui.cpp +++ b/src/qt/bitcoingui.cpp @@ -26,6 +26,8 @@ #include "wallet.h" #include "init.h" +#include "qtquick_controls/cpp/guimenutoolbarwidget.h" + #ifdef Q_OS_MAC #include "macdockiconhandler.h" #endif @@ -60,6 +62,7 @@ const QString BitcoinGUI::DEFAULT_WALLET = "~Default"; BitcoinGUI::BitcoinGUI(QWidget *parent) : QMainWindow(parent), clientModel(0), + menuBar_new(0), encryptWalletAction(0), changePassphraseAction(0), aboutQtAction(0), @@ -77,9 +80,20 @@ BitcoinGUI::BitcoinGUI(QWidget *parent) : setUnifiedTitleAndToolBarOnMac(true); QApplication::setAttribute(Qt::AA_DontShowIconsInMenus); #endif - // Create wallet frame and make it the central widget - walletFrame = new WalletFrame(this); - setCentralWidget(walletFrame); + // Create wallet frame with main menu + walletFrame = new WalletFrame(this); + menuBar_new = new GUIMenuToolbarWidget( this ); + connect( menuBar_new, SIGNAL( signalItemClicked( GUIMenuToolbarControl::EMenuToolbarItemTypes ) ), this, SLOT( slotMenuToolbarItemClicked( GUIMenuToolbarControl::EMenuToolbarItemTypes ) ), Qt::UniqueConnection ); + + // envelope them in another widget + QWidget* pCentralWidget = new QWidget( this ); + QVBoxLayout* pBoxLayout = new QVBoxLayout(); + pBoxLayout->addWidget( menuBar_new->dockQmlToWidget() ); + pBoxLayout->addWidget( walletFrame ); + pCentralWidget->setLayout( pBoxLayout ); + + // and make it the central widget + setCentralWidget(pCentralWidget); // Accept D&D of URIs setAcceptDrops(true); @@ -92,7 +106,7 @@ BitcoinGUI::BitcoinGUI(QWidget *parent) : createMenuBar(); // Create the toolbars - createToolBars(); +// createToolBars(); // Create system tray icon and notification createTrayIcon(); @@ -295,6 +309,7 @@ void BitcoinGUI::createToolBars() toolbar->addAction(receiveCoinsAction); toolbar->addAction(historyAction); toolbar->addAction(addressBookAction); + } void BitcoinGUI::setClientModel(ClientModel *clientModel) @@ -466,34 +481,49 @@ void BitcoinGUI::optionsClicked() void BitcoinGUI::aboutClicked() { - AboutDialog dlg; + if ( menuBar_new ) menuBar_new->SetCurrentItemType( GUIMenuToolbarControl::INFO ); + AboutDialog dlg; dlg.setModel(clientModel); dlg.exec(); } +// TODO +//void BitcoinGUI::redeemPryptoClicked() +//{ +// if ( menuBar_new ) menuBar_new->SetCurrentItemType( GUIMenuToolbarControl::INFO ); +// RedeemPryptoDialog dlg; +// dlg.setModel(clientModel); +// dlg.exec(); +//} + void BitcoinGUI::gotoOverviewPage() { if (walletFrame) walletFrame->gotoOverviewPage(); + if ( menuBar_new ) menuBar_new->SetCurrentItemType( GUIMenuToolbarControl::OVERVIEW ); } void BitcoinGUI::gotoHistoryPage() { if (walletFrame) walletFrame->gotoHistoryPage(); + if ( menuBar_new ) menuBar_new->SetCurrentItemType( GUIMenuToolbarControl::TRANSACTIONS ); } void BitcoinGUI::gotoAddressBookPage() { if (walletFrame) walletFrame->gotoAddressBookPage(); + if ( menuBar_new ) menuBar_new->SetCurrentItemType( GUIMenuToolbarControl::CONTACTS ); } void BitcoinGUI::gotoReceiveCoinsPage() { if (walletFrame) walletFrame->gotoReceiveCoinsPage(); + if ( menuBar_new ) menuBar_new->SetCurrentItemType( GUIMenuToolbarControl::RECEIVE ); } void BitcoinGUI::gotoSendCoinsPage(QString addr) { if (walletFrame) walletFrame->gotoSendCoinsPage(addr); + if ( menuBar_new ) menuBar_new->SetCurrentItemType( GUIMenuToolbarControl::SEND ); } void BitcoinGUI::gotoSignMessageTab(QString addr) @@ -834,5 +864,48 @@ void BitcoinGUI::toggleHidden() void BitcoinGUI::detectShutdown() { if (ShutdownRequested()) - QMetaObject::invokeMethod(QCoreApplication::instance(), "quit", Qt::QueuedConnection); + QMetaObject::invokeMethod(QCoreApplication::instance(), "quit", Qt::QueuedConnection); +} + +void BitcoinGUI::slotMenuToolbarItemClicked( GUIMenuToolbarControl::EMenuToolbarItemTypes a_eType ) +{ + switch( a_eType ) + { + case GUIMenuToolbarControl::OVERVIEW: + { + emit overviewAction->triggered(); + break; + } + case GUIMenuToolbarControl::SEND: + { + emit sendCoinsAction->triggered(); + break; + } + case GUIMenuToolbarControl::RECEIVE: + { + emit receiveCoinsAction->triggered(); + break; + } + case GUIMenuToolbarControl::TRANSACTIONS: + { + emit historyAction->triggered(); + break; + } + case GUIMenuToolbarControl::CONTACTS: + { + emit addressBookAction->triggered(); + break; + } + case GUIMenuToolbarControl::REDEEM_PRYPTO: + { + // TODO + // emit pryptoRedeemAction->triggered(); + break; + } + case GUIMenuToolbarControl::INFO: + { + emit aboutAction->triggered(); + break; + } + } } diff --git a/src/qt/bitcoingui.h b/src/qt/bitcoingui.h index 5656af4..c6486a4 100644 --- a/src/qt/bitcoingui.h +++ b/src/qt/bitcoingui.h @@ -5,6 +5,8 @@ #include #include +#include "qtquick_controls/cpp/guimenutoolbarcontrol.h" + class TransactionTableModel; class WalletFrame; class WalletView; @@ -19,6 +21,8 @@ class SignVerifyMessageDialog; class Notificator; class RPCConsole; +class GUIMenuToolbarWidget; + class CWallet; QT_BEGIN_NAMESPACE @@ -78,6 +82,7 @@ protected: private: ClientModel *clientModel; WalletFrame *walletFrame; + GUIMenuToolbarWidget *menuBar_new; QLabel *labelEncryptionIcon; QLabel *labelConnectionsIcon; @@ -195,6 +200,9 @@ private slots: /** called by a timer to check if fRequestShutdown has been set **/ void detectShutdown(); + + /** called from new Qml menu toolbar on user click **/ + void slotMenuToolbarItemClicked( GUIMenuToolbarControl::EMenuToolbarItemTypes a_eType ); }; #endif // BITCOINGUI_H diff --git a/src/qt/gui20_skin.cpp b/src/qt/gui20_skin.cpp new file mode 100644 index 0000000..822a451 --- /dev/null +++ b/src/qt/gui20_skin.cpp @@ -0,0 +1,28 @@ +#include "gui20_skin.h" + + +GUI20Skin::GUI20Skin( QObject* a_pParent ) + : QObject( a_pParent ) + , colorToolbarMainGradientBegin( "#9c181c" ) + , colorToolbarMainGradientEnd( "#ae1e22" ) + , colorToolbarMainCurrent( "#761316" ) + , colorToolbarMainBottomCurrent( "#e1252b" ) + , colorToolbarMainTextCurrent( "#ffffff" ) + , colorToolbarMainTextNormal( "#3f0a0c" ) + , colorToolbarMainTextShadow( "#c72427" ) + , colorMainWindowBackground( "#afafaf" ) + , colorMainWindowFrameBackground( "#ffffff" ) +{ +} + +GUI20Skin& GUI20Skin::Instance() +{ + static GUI20Skin m_oInstance; + return m_oInstance; +} + +GUI20Skin::~GUI20Skin() +{ + +} + diff --git a/src/qt/gui20_skin.h b/src/qt/gui20_skin.h new file mode 100644 index 0000000..819a2d7 --- /dev/null +++ b/src/qt/gui20_skin.h @@ -0,0 +1,69 @@ +#ifndef GUI20_SKIN_H +#define GUI20_SKIN_H + +#include +#include + +#include +#include + +class GUI20Skin : public QObject +{ + Q_OBJECT + + Q_PROPERTY( QColor colorToolbarMainGradientBegin READ GetColorToolbarMainGradientBegin CONSTANT ) + Q_PROPERTY( QColor colorToolbarMainGradientEnd READ GetColorToolbarMainGradientEnd CONSTANT ) + Q_PROPERTY( QColor colorToolbarMainCurrent READ GetColorToolbarMainCurrent CONSTANT ) + + Q_PROPERTY( QColor colorToolbarMainBottomCurrent READ GetColorToolbarBottomCurrent CONSTANT ) + + Q_PROPERTY( QColor colorToolbarMainTextCurrent READ GetColorToolbarMainTextCurrent CONSTANT ) + Q_PROPERTY( QColor colorToolbarMainTextNormal READ GetColorToolbarMainTextNormal CONSTANT ) + Q_PROPERTY( QColor colorToolbarMainTextShadow READ GetColorToolbarMainTextShadow CONSTANT ) + + + Q_ENUMS( ESizeConstants ) + +public: + + enum ESizeConstants + { + ToolbarMainHeight = 77, + ToolbarMainBottomPartHeight = 5 + }; + + const QColor GetColorToolbarMainGradientBegin() const {return colorToolbarMainGradientBegin;} + const QColor GetColorToolbarMainGradientEnd() const {return colorToolbarMainGradientEnd;} + const QColor GetColorToolbarMainCurrent() const {return colorToolbarMainCurrent;} + + const QColor GetColorToolbarBottomCurrent() const {return colorToolbarMainBottomCurrent;} + + const QColor GetColorToolbarMainTextCurrent() const {return colorToolbarMainTextCurrent;} + const QColor GetColorToolbarMainTextNormal() const {return colorToolbarMainTextNormal;} + const QColor GetColorToolbarMainTextShadow() const {return colorToolbarMainTextShadow;} + + +private: + const QColor colorToolbarMainGradientBegin; + const QColor colorToolbarMainGradientEnd; + const QColor colorToolbarMainCurrent; + + const QColor colorToolbarMainBottomCurrent; + + const QColor colorToolbarMainTextCurrent; + const QColor colorToolbarMainTextNormal; + const QColor colorToolbarMainTextShadow; + + const QColor colorMainWindowBackground; + const QColor colorMainWindowFrameBackground; + +public: + static GUI20Skin& Instance(); +private: + GUI20Skin( QObject* a_pParent = 0 ); + virtual ~GUI20Skin(); + +}; +#endif // GUI20_SKIN_H + + diff --git a/src/qt/qtquick_controls/cpp/guimenutoolbarcontrol.cpp b/src/qt/qtquick_controls/cpp/guimenutoolbarcontrol.cpp new file mode 100644 index 0000000..5b33af3 --- /dev/null +++ b/src/qt/qtquick_controls/cpp/guimenutoolbarcontrol.cpp @@ -0,0 +1,70 @@ +#include "guimenutoolbarcontrol.h" + +#include "guimenutoolbarlistview.h" +#include "qmlmenutoolbarmodel.h" +#include "qmlmenutoolbaritem.h" + +#include "gui20_skin.h" + +GUIMenuToolbarControl::GUIMenuToolbarControl( QQuickItem* a_pParent ) + : QQuickItem( a_pParent ) + , m_pMenuToolbarView( 0 ) +{ +} + +GUIMenuToolbarControl::~GUIMenuToolbarControl() +{ + if ( m_pMenuToolbarView ) + { + delete m_pMenuToolbarView; + m_pMenuToolbarView = 0; + } +} + + +void GUIMenuToolbarControl::InitializeMenuToolbarView( GUIMenuToolbarListView* a_pView ) +{ + if ( a_pView ) + { + if ( m_pMenuToolbarView ) + { + delete m_pMenuToolbarView; + } + m_pMenuToolbarView = a_pView; + if ( m_pMenuToolbarView ) + { + QmlMenuToolbarModel* pStandardMenuModel = new QmlMenuToolbarModel( m_pMenuToolbarView ); + if ( pStandardMenuModel ) + { + pStandardMenuModel->append( new QmlMenuToolbarItem( tr( "Overview" ), tr( "Overview description" ), "qrc:/icons/res/icons/GUI20_mainToolBar_overview_hover.png", "qrc:/icons/res/icons/GUI20_mainToolBar_overview.png" , OVERVIEW ) ); + pStandardMenuModel->append( new QmlMenuToolbarItem( tr( "Send" ), tr( "Send description" ), "qrc:/icons/res/icons/GUI20_mainToolBar_send_hover.png", "qrc:/icons/res/icons/GUI20_mainToolBar_send.png" , SEND ) ); + pStandardMenuModel->append( new QmlMenuToolbarItem( tr( "Receive" ), tr( "Receive description" ), "qrc:/icons/res/icons/GUI20_mainToolBar_receive_hover.png", "qrc:/icons/res/icons/GUI20_mainToolBar_receive.png" , RECEIVE ) ); + pStandardMenuModel->append( new QmlMenuToolbarItem( tr( "Transactions" ), tr( "Transactions description" ), "qrc:/icons/res/icons/GUI20_mainToolBar_transactions_hover.png", "qrc:/icons/res/icons/GUI20_mainToolBar_transactions.png" , TRANSACTIONS ) ); + pStandardMenuModel->append( new QmlMenuToolbarItem( tr( "Contacts" ), tr( "Contacts description" ), "qrc:/icons/res/icons/GUI20_mainToolBar_contacts_hover.png", "qrc:/icons/res/icons/GUI20_mainToolBar_contacts.png" , CONTACTS ) ); + pStandardMenuModel->append( new QmlMenuToolbarItem( tr( "Redeem Prypto" ), tr( "Redeem Prypto description" ), "qrc:/icons/res/icons/GUI20_mainToolBar_redeemprypto_hover.png", "qrc:/icons/res/icons/GUI20_mainToolBar_redeemprypto.png" , REDEEM_PRYPTO ) ); + pStandardMenuModel->append( new QmlMenuToolbarItem( tr( "Info" ), tr( "Info description" ), "qrc:/icons/res/icons/GUI20_mainToolBar_info_hover.png", "qrc:/icons/res/icons/GUI20_mainToolBar_info.png" , INFO ) ); + pStandardMenuModel->SetCurrentItemIndex( 0 ); + m_pMenuToolbarView->SetModel( pStandardMenuModel ); + ConnectListViewSignals(); + } + } + } +} + +void GUIMenuToolbarControl::ConnectListViewSignals() +{ + if ( m_pMenuToolbarView ) + { + disconnect( m_pMenuToolbarView ); + QmlMenuToolbarModel* pModel = m_pMenuToolbarView->GetModel(); + if ( pModel ) + { + connect( pModel, SIGNAL( signalCurrentItemIndexChanged() ), this, SLOT( slotCurrentItemIndexChanged() ), Qt::UniqueConnection ); + } + } +} + +void GUIMenuToolbarControl::slotCurrentItemIndexChanged() +{ + emit signalCurrentItemIndexChanged(); +} diff --git a/src/qt/qtquick_controls/cpp/guimenutoolbarcontrol.h b/src/qt/qtquick_controls/cpp/guimenutoolbarcontrol.h new file mode 100644 index 0000000..64ca3ee --- /dev/null +++ b/src/qt/qtquick_controls/cpp/guimenutoolbarcontrol.h @@ -0,0 +1,44 @@ +#ifndef GUIMENUTOOLBARCONTROL_H +#define GUIMENUTOOLBARCONTROL_H + +#include + +class GUIMenuToolbarListView; + +class GUIMenuToolbarControl : public QQuickItem +{ + Q_OBJECT + Q_ENUMS( EMenuToolbarItemTypes ) +public: + + enum EMenuToolbarItemTypes + { OVERVIEW + , SEND + , RECEIVE + , TRANSACTIONS + , CONTACTS + , REDEEM_PRYPTO + , INFO + }; + + GUIMenuToolbarControl( QQuickItem* a_pParent = 0 ); + virtual ~GUIMenuToolbarControl(); + + Q_INVOKABLE void InitializeMenuToolbarView( GUIMenuToolbarListView* a_pView ); + GUIMenuToolbarListView* GetMenuToolbarView() const { return m_pMenuToolbarView; } + +public slots: + +signals: + void signalCurrentItemIndexChanged(); +public slots: + +private: + GUIMenuToolbarListView* m_pMenuToolbarView; + + void ConnectListViewSignals(); +private slots: + void slotCurrentItemIndexChanged(); +}; + +#endif // GUIMENUTOOLBARCONTROL_H diff --git a/src/qt/qtquick_controls/cpp/guimenutoolbarlistview.cpp b/src/qt/qtquick_controls/cpp/guimenutoolbarlistview.cpp new file mode 100644 index 0000000..7b8c69b --- /dev/null +++ b/src/qt/qtquick_controls/cpp/guimenutoolbarlistview.cpp @@ -0,0 +1,47 @@ +#include "guimenutoolbarlistview.h" + +#include "qmlmenutoolbarmodel.h" +#include "qmlmenutoolbaritem.h" + +GUIMenuToolbarListView::GUIMenuToolbarListView( QQuickItem* a_pParent ) + : QQuickItem( a_pParent ) + , m_pModel( 0 ) +{ +} + +void GUIMenuToolbarListView::Clear() +{ + if ( m_pModel ) + { + m_pModel->clear(); + } +} + +void GUIMenuToolbarListView::OnClicked( int a_iItemIndex ) +{ + if ( m_pModel ) + { + m_pModel->SetCurrentItemIndex( a_iItemIndex ); + } +} + +GUIMenuToolbarListView::~GUIMenuToolbarListView() +{ + if ( m_pModel ) + { + delete m_pModel; + m_pModel = 0; + } +} + +void GUIMenuToolbarListView::SetModel( QmlMenuToolbarModel* a_pModel ) +{ + if ( m_pModel ) + { + delete m_pModel; + } + m_pModel = a_pModel; + emit signalModelChanged(); +} + + diff --git a/src/qt/qtquick_controls/cpp/guimenutoolbarlistview.h b/src/qt/qtquick_controls/cpp/guimenutoolbarlistview.h new file mode 100644 index 0000000..a25905d --- /dev/null +++ b/src/qt/qtquick_controls/cpp/guimenutoolbarlistview.h @@ -0,0 +1,36 @@ +#ifndef GUIMENUTOOLBARLISTVIEW_H +#define GUIMENUTOOLBARLISTVIEW_H + +#include + +class QmlListModel; +class QmlMenuToolbarModel; +class QmlMenuToolbarItem; + + +class GUIMenuToolbarListView : public QQuickItem +{ + Q_OBJECT + Q_PROPERTY( QmlMenuToolbarModel* p_pListModel MEMBER m_pModel NOTIFY signalModelChanged ) + +public: + explicit GUIMenuToolbarListView( QQuickItem *a_pParent = 0 ); + virtual ~GUIMenuToolbarListView(); /** Destructor **/ + + void SetModel( QmlMenuToolbarModel* a_pModel ); + QmlMenuToolbarModel* GetModel() const { return m_pModel; } + + void Clear(); + + Q_INVOKABLE void OnClicked( int a_iItemIndex ); +signals: + void signalModelChanged(); + +public slots: + +private: + + QmlMenuToolbarModel* m_pModel; +}; + +#endif // GUIMENUTOOLBARLISTVIEW_H diff --git a/src/qt/qtquick_controls/cpp/guimenutoolbarwidget.cpp b/src/qt/qtquick_controls/cpp/guimenutoolbarwidget.cpp new file mode 100644 index 0000000..4254774 --- /dev/null +++ b/src/qt/qtquick_controls/cpp/guimenutoolbarwidget.cpp @@ -0,0 +1,106 @@ +#include "guimenutoolbarwidget.h" + +#include "guimenutoolbarcontrol.h" +#include "guimenutoolbarlistview.h" +#include "qmlmenutoolbarmodel.h" +#include "qmlmenutoolbaritem.h" + +#include "qmlimageprovider.h" +#include "gui20_skin.h" + +#include +#include + +GUIMenuToolbarWidget::GUIMenuToolbarWidget( QWidget *a_pParent ) + : QWidget( a_pParent ) + , m_pToolbarControl( 0 ) + , m_pQmlImageProvider( 0 ) +{ + registerCustomQmlTypes(); +} + +GUIMenuToolbarWidget::~GUIMenuToolbarWidget() +{ + if ( m_pQmlImageProvider ) + { + delete m_pQmlImageProvider; + m_pQmlImageProvider = 0; + } + if( m_pToolbarControl ) + { + delete m_pToolbarControl; + m_pToolbarControl = 0; + } +} + +void GUIMenuToolbarWidget::registerCustomQmlTypes() +{ + qmlRegisterType("CasinoCoinControls", 1, 0, "GUIMenuToolbarControl" ); + qmlRegisterType("CasinoCoinControls", 1, 0, "GUIMenuToolbarListView" ); + qmlRegisterType("CasinoCoinControls", 1, 0, "QmlMenuToolbarModel" ); +} + +void GUIMenuToolbarWidget::slotCurrentItemChanged() +{ + if ( m_pToolbarControl ) + { + GUIMenuToolbarListView* pListView = m_pToolbarControl->GetMenuToolbarView(); + if ( pListView ) + { + QmlMenuToolbarModel* pModel = pListView->GetModel(); + if ( pModel ) + { + emit signalItemClicked( static_cast( pModel->GetData( pModel->GetCurrentItemIndex(), QmlMenuToolbarItem::ROLE_INTERNAL_TYPE ).toInt() ) ); + } + } + } +} + +QWidget* GUIMenuToolbarWidget::dockQmlToWidget() +{ + QQuickView* pMenuToolbarWindow = new QQuickView; + QQmlContext* pContext = pMenuToolbarWindow->rootContext(); + if ( pContext ) + { + pContext->setContextProperty( "GUI20Skin", &GUI20Skin::Instance() ); + } + QQmlEngine* pEngine = pMenuToolbarWindow->engine(); + if ( pEngine ) + { + m_pQmlImageProvider = new QmlImageProvider(); + pEngine->addImageProvider( "mainToolBarImages", m_pQmlImageProvider ); + } + pMenuToolbarWindow->setSource( QUrl( QStringLiteral( "qrc:/qml/qtquick_controls/qml/QmlGUIMenuToolbarWindow.qml" ) ) ); + QQuickItem* pRootObject = pMenuToolbarWindow->rootObject(); + if ( pRootObject ) + { + m_pToolbarControl = pRootObject->findChild(); + if ( m_pToolbarControl ) + { + connect( m_pToolbarControl, SIGNAL( signalCurrentItemIndexChanged() ), this, SLOT( slotCurrentItemChanged() ), Qt::UniqueConnection ); + } + } + QWidget* pPlaceHolder = QWidget::createWindowContainer( pMenuToolbarWindow, this ); + if ( pPlaceHolder ) + { + pPlaceHolder->setMinimumHeight( 82 ); + } + return pPlaceHolder; +} + +void GUIMenuToolbarWidget::SetCurrentItemType( GUIMenuToolbarControl::EMenuToolbarItemTypes a_eType ) +{ + if ( m_pToolbarControl ) + { + GUIMenuToolbarListView* pListView = m_pToolbarControl->GetMenuToolbarView(); + if ( pListView ) + { + QmlMenuToolbarModel* pModel = pListView->GetModel(); + if ( pModel ) + { + pModel->SetCurrentItemIndex( pModel->GetItemIndex( QmlMenuToolbarItem::ROLE_INTERNAL_TYPE, QVariant( a_eType ) ) ); + } + } + } +} + diff --git a/src/qt/qtquick_controls/cpp/guimenutoolbarwidget.h b/src/qt/qtquick_controls/cpp/guimenutoolbarwidget.h new file mode 100644 index 0000000..c03b7a9 --- /dev/null +++ b/src/qt/qtquick_controls/cpp/guimenutoolbarwidget.h @@ -0,0 +1,34 @@ +#ifndef GUIMENUTOOLBARWIDGET_H +#define GUIMENUTOOLBARWIDGET_H + +#include +#include "guimenutoolbarcontrol.h" + +class QmlImageProvider; + +class GUIMenuToolbarWidget : public QWidget +{ + Q_OBJECT +public: + + explicit GUIMenuToolbarWidget( QWidget* a_pParent = 0 ); + virtual ~GUIMenuToolbarWidget(); + + QWidget* dockQmlToWidget(); + + void SetCurrentItemType( GUIMenuToolbarControl::EMenuToolbarItemTypes a_eType ); +signals: + void signalItemClicked( GUIMenuToolbarControl::EMenuToolbarItemTypes a_eType ); +public slots: + +private: + void registerCustomQmlTypes(); + + GUIMenuToolbarControl* m_pToolbarControl; + QmlImageProvider* m_pQmlImageProvider; + +private slots: + void slotCurrentItemChanged(); +}; + +#endif // GUIMENUTOOLBARWIDGET_H diff --git a/src/qt/qtquick_controls/cpp/qmlimageprovider.cpp b/src/qt/qtquick_controls/cpp/qmlimageprovider.cpp index 35eedbe..9108b73 100644 --- a/src/qt/qtquick_controls/cpp/qmlimageprovider.cpp +++ b/src/qt/qtquick_controls/cpp/qmlimageprovider.cpp @@ -22,8 +22,9 @@ void QmlImageProvider::AddToImagePool( const QMap& a_aImages ) } } -QImage QmlImageProvider::requestImage( const QString& a_rImageID, QSize* a_pSize, const QSize& a_ra_rRequestedSize ) +QImage QmlImageProvider::requestImage( const QString& a_rImageID, QSize* a_pSize, const QSize& a_rRequestedSize ) { + Q_UNUSED( a_rRequestedSize ); QImage oImage( m_aImagePool.value( a_rImageID ) ); if ( a_pSize ) { diff --git a/src/qt/qtquick_controls/cpp/qmlmenutoolbaritem.cpp b/src/qt/qtquick_controls/cpp/qmlmenutoolbaritem.cpp new file mode 100644 index 0000000..624316f --- /dev/null +++ b/src/qt/qtquick_controls/cpp/qmlmenutoolbaritem.cpp @@ -0,0 +1,37 @@ +#include "qmlmenutoolbaritem.h" + +#include + +QmlMenuToolbarItem::QmlMenuToolbarItem + ( QString a_strText + , QString a_strDescription + , QString a_strImageHoverSource + , QString a_strImageNormalSource + , int a_iType + , QObject *a_pParent + ) + : QmlListItem( QVariant( a_strText ), QVariant( a_strDescription ), QVariant( a_strImageHoverSource ), QVariant( a_strImageNormalSource ), QVariant( a_iType ), a_pParent ) +{ +} + +QmlMenuToolbarItem::QmlMenuToolbarItem( QObject* a_pParent ) + : QmlListItem( QVariant( "" ), QVariant( "" ), QVariant( "" ), QVariant( "" ), QVariant( -1 ), a_pParent ) +{ +} + +QmlMenuToolbarItem::~QmlMenuToolbarItem() +{ + +} + +QHash QmlMenuToolbarItem::RoleNames() const +{ + QHash aRoleNames; + aRoleNames[ROLE_TEXT] = "m_text"; + aRoleNames[ROLE_DESCRIPTION] = "m_description"; + aRoleNames[ROLE_IMAGE_HOVER_SOURCE] = "m_imageHoverSource"; + aRoleNames[ROLE_IMAGE_NORMAL_SOURCE] = "m_imageNormalSource"; + aRoleNames[ROLE_INTERNAL_TYPE] = "m_internalType"; + return aRoleNames; +} + diff --git a/src/qt/qtquick_controls/cpp/qmlmenutoolbaritem.h b/src/qt/qtquick_controls/cpp/qmlmenutoolbaritem.h new file mode 100644 index 0000000..ccf6e7a --- /dev/null +++ b/src/qt/qtquick_controls/cpp/qmlmenutoolbaritem.h @@ -0,0 +1,36 @@ +#ifndef QMLMENUTOOLBARITEM_H +#define QMLMENUTOOLBARITEM_H + +#include "qmllistitem.h" + +class QmlMenuToolbarItem : public QmlListItem +{ + Q_OBJECT + Q_ENUMS( EMenuToolbarRoles ) + +public: + enum EMenuToolbarRoles /** User-specific model roles **/ + { ROLE_TEXT = ROLE_1 + , ROLE_DESCRIPTION = ROLE_2 + , ROLE_IMAGE_HOVER_SOURCE = ROLE_3 + , ROLE_IMAGE_NORMAL_SOURCE = ROLE_4 + , ROLE_INTERNAL_TYPE = ROLE_5 + }; + + explicit QmlMenuToolbarItem + ( QString a_strText + , QString a_strDescription + , QString a_strImageHoverSource + , QString a_strImageNormalSource + , int a_iType + , QObject *a_pParent = 0 + ); + + explicit QmlMenuToolbarItem( QObject *a_pParent = 0 ); + virtual ~QmlMenuToolbarItem(); + + virtual QHash RoleNames() const; /** Define class-specific roles **/ + +}; + +#endif // QMLMENUTOOLBARITEM_H diff --git a/src/qt/qtquick_controls/cpp/qmlmenutoolbarmodel.cpp b/src/qt/qtquick_controls/cpp/qmlmenutoolbarmodel.cpp new file mode 100644 index 0000000..036ad19 --- /dev/null +++ b/src/qt/qtquick_controls/cpp/qmlmenutoolbarmodel.cpp @@ -0,0 +1,15 @@ +#include "qmlmenutoolbarmodel.h" + +#include "qmlmenutoolbaritem.h" +#include + +QmlMenuToolbarModel::QmlMenuToolbarModel( QObject* a_pParent ) + : QmlListModel( new QmlMenuToolbarItem(), a_pParent ) +{ +} + +QmlMenuToolbarModel::~QmlMenuToolbarModel() +{ + +} + diff --git a/src/qt/qtquick_controls/cpp/qmlmenutoolbarmodel.h b/src/qt/qtquick_controls/cpp/qmlmenutoolbarmodel.h new file mode 100644 index 0000000..acda33b --- /dev/null +++ b/src/qt/qtquick_controls/cpp/qmlmenutoolbarmodel.h @@ -0,0 +1,16 @@ +#ifndef QMLMENUTOOLBARMODEL_H +#define QMLMENUTOOLBARMODEL_H + +#include "qmllistmodel.h" + +class QmlMenuToolbarItem; + +class QmlMenuToolbarModel : public QmlListModel +{ + Q_OBJECT +public: + explicit QmlMenuToolbarModel( QObject* a_pParent = 0 ); + virtual ~QmlMenuToolbarModel(); /** Destructor **/ +}; + +#endif // QMLMENUTOOLBARMODEL_H diff --git a/src/qt/qtquick_controls/qml/QmlGUIBannerWindow.qml b/src/qt/qtquick_controls/qml/QmlGUIBannerWindow.qml index a1ff692..9ae86d4 100644 --- a/src/qt/qtquick_controls/qml/QmlGUIBannerWindow.qml +++ b/src/qt/qtquick_controls/qml/QmlGUIBannerWindow.qml @@ -7,7 +7,6 @@ Rectangle { id: id_bannerControlMain } - color: "#F2F0F1" width: id_bannerControlMain.width height: id_bannerControlMain.height } diff --git a/src/qt/qtquick_controls/qml/QmlGUIMenuToolbarControl.qml b/src/qt/qtquick_controls/qml/QmlGUIMenuToolbarControl.qml new file mode 100644 index 0000000..374aa26 --- /dev/null +++ b/src/qt/qtquick_controls/qml/QmlGUIMenuToolbarControl.qml @@ -0,0 +1,57 @@ +import QtQuick 2.0 +import CasinoCoinControls 1.0 + +GUIMenuToolbarControl +{ + id: id_toolbarControl + + Rectangle + { + id: id_toolbarRect + anchors.top: id_toolbarControl.top + anchors.left: id_toolbarControl.left + width: id_toolbarControl.width + height: id_toolbarControl.height - id_toolbarBottomStripe.height + gradient: + Gradient + { + GradientStop { position: 0.0; color: GUI20Skin.colorToolbarMainGradientBegin } + GradientStop { position: 1.0; color: GUI20Skin.colorToolbarMainGradientEnd } + } + z: 0 + QmlGUIMenuToolbarListView + { + id: id_menuToolbarListView + width: id_toolbarControl.width + anchors.left: id_toolbarRect.left + anchors.top: id_toolbarRect.top + + Component.onCompleted: + { + id_toolbarControl.InitializeMenuToolbarView( id_menuToolbarListView ) + } + z: 2 + } + Rectangle + { + id: id_currentSelectionIndicator + height: id_toolbarControl.height + width: height + color: GUI20Skin.colorToolbarMainCurrent + z: 1 + x: id_menuToolbarListView.m_iCurrentItemXProperty + Rectangle + { + id: id_toolbarBottomStripe + width: id_currentSelectionIndicator.width + height: 5 + anchors.bottom: id_currentSelectionIndicator.bottom + color: GUI20Skin.colorToolbarMainBottomCurrent + } + Behavior on x + { + NumberAnimation { duration: 300; easing.type: Easing.InOutQuad } + } + } + } +} diff --git a/src/qt/qtquick_controls/qml/QmlGUIMenuToolbarListView.qml b/src/qt/qtquick_controls/qml/QmlGUIMenuToolbarListView.qml new file mode 100644 index 0000000..c429999 --- /dev/null +++ b/src/qt/qtquick_controls/qml/QmlGUIMenuToolbarListView.qml @@ -0,0 +1,79 @@ +import QtQuick 2.0 +import CasinoCoinControls 1.0 + +GUIMenuToolbarListView +{ + id: id_ListViewItem + + property alias m_ListModel: id_ListView.model + property alias m_ListView: id_ListView + property real m_iCurrentItemXProperty: id_ListView.currentIndex * id_toolbarControl.height + property real m_iCppCurrentIndex: p_pListModel.p_iCurrentElementIndex + + ListView + { + id: id_ListView + anchors.fill: id_ListViewItem + + model: p_pListModel + delegate: id_menuToolbarViewDelegate + + orientation: ListView.Horizontal + currentIndex: m_iCppCurrentIndex + } + + + Component + { + id: id_menuToolbarViewDelegate + Rectangle + { + id: id_delegateRect + height: id_toolbarControl.height + width: height + color: "transparent" + z: 1 + Rectangle + { + id: id_singleButton + height: id_toolbarControl.height - id_toolbarBottomStripe.height + width: id_delegateRect.width + color: "transparent" + Image + { + id: id_singleButtonImage + source: id_delegateMouseArea.containsMouse ? m_imageHoverSource : p_pListModel.p_iCurrentElementIndex == index ? m_imageHoverSource : m_imageNormalSource + anchors.centerIn: id_singleButton + } + Text + { + id: id_singleButtonText + + text: m_text + wrapMode: Text.Wrap + color: id_delegateMouseArea.containsMouse ? GUI20Skin.colorToolbarMainTextCurrent : p_pListModel.p_iCurrentElementIndex == index ? GUI20Skin.colorToolbarMainTextCurrent : GUI20Skin.colorToolbarMainTextNormal + style: Text.Sunken + styleColor: GUI20Skin.colorToolbarMainTextShadow + font.pixelSize: 10 + + anchors.bottom: id_singleButton.bottom + anchors.bottomMargin: 5 + anchors.horizontalCenter: id_singleButton.horizontalCenter + + } + } + MouseArea + { + id: id_delegateMouseArea + anchors.fill: id_singleButton + hoverEnabled: true + onClicked: + { + OnClicked( index ) + } + } + } + + } +} + diff --git a/src/qt/qtquick_controls/qml/QmlGUIMenuToolbarWindow.qml b/src/qt/qtquick_controls/qml/QmlGUIMenuToolbarWindow.qml new file mode 100644 index 0000000..148178a --- /dev/null +++ b/src/qt/qtquick_controls/qml/QmlGUIMenuToolbarWindow.qml @@ -0,0 +1,14 @@ +import QtQuick 2.0 + +Rectangle +{ + id: id_toolbarRoot + width: 1280 + height: 77 + 5 + color: "transparent" + QmlGUIMenuToolbarControl + { + id: id_toolbarControlMain + anchors.fill: id_toolbarRoot + } +} diff --git a/src/qt/res/icons/GUI20_mainToolBar_contacts.png b/src/qt/res/icons/GUI20_mainToolBar_contacts.png new file mode 100644 index 0000000000000000000000000000000000000000..49bf710bd716980329ce9ddcbca481182c6765f3 GIT binary patch literal 632 zcmeAS@N?(olHy`uVBq!ia0vp^aX{?L!3HGtCtQvOQj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS=07?`9yT^vIyZoRo}>n-Cb)9~@<`8O-etMnWL1cPM+Cq{J4 zjbJ%?X!@}*rvqAy`yKABs$q*hZL%^*;*v&-$A&GPFPnP97C9aI$+g{hX6X74%x}(4 ztels;^YycD+c$4MyT;xrzszsHl;j!~XW=+fy~Z-s;#Rur%wRN0*fLXZORF zC$Aj-{I@QSzv!K(#+RM*?s-i=QRe#kC7q%KTo_#S|dtYwL zyLEW=k;AVSv2O{RX%>}LvZ8VKQMB*x#_*p3G?kd zz4m{1{rPwI`N^ZLla-FoTEFao`NiLE^J;#7NPfQdf8~Y{-}PNmuj{rOd{9asNBs z4z_CLC*SYgJM!z)XaBF4H*fULzB+ZYZgu8@;4NOgJ7wQLo^RaAbuZnouWw%No~Y`| z9sBKzYby;WL|&g{eWBydyVLu>iQBmScot;-s6VkjBxHu}<@ltQezOOS?DHB>5HNPo f#qwwW<1}DUzxd-=%HLQ}QeyCQ^>bP0l+XkKmnJp2 literal 0 HcmV?d00001 diff --git a/src/qt/res/icons/GUI20_mainToolBar_contacts_hover.png b/src/qt/res/icons/GUI20_mainToolBar_contacts_hover.png new file mode 100644 index 0000000000000000000000000000000000000000..385adb8bf85ca9cdd0b8fceeb029aa8088e7c113 GIT binary patch literal 383 zcmeAS@N?(olHy`uVBq!ia0vp^aX{?L!3HGtCtQvOQj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS=07#I~jT^vIyZoRo}n8oBM(f07>4Ho_hW*qYl1y?kPoK#eq z+b*E5@GVZkywmqx;-O#M$-+!4=Lr6L-rBF*UK?>Fsa)dt#uc^96(1h3%I!JOEMD<} zi9hba!SweFKmY9CSo+4etgF|2p1R$vV|Gd1)4sp%)K9%CaW}u_t;Fo@`{F+=tvRmt z;P&;$4<7b^X8-WuU^6?voDI-0JdFCQzn5OkzI~(Eb;r|p%c?6Lm2bS>_k4Nvqxx50 z1B9*#|63h5{lV>R>#uLWq4sSGr`_##&i{WedotF){G@rV`i-iY_S^W|e%$lTfVObk qR5Y^dL){Lx8o>p6<)$^a0fU*O&ZS*p3yOgu%HZkh=d#Wzp$P!r->l*Q literal 0 HcmV?d00001 diff --git a/src/qt/res/icons/GUI20_mainToolBar_info.png b/src/qt/res/icons/GUI20_mainToolBar_info.png new file mode 100644 index 0000000000000000000000000000000000000000..2ad49df1ccb1650d9fe4c517c3a8e6978e854698 GIT binary patch literal 2091 zcmV+`2-Nq9P)lT@o!*0g^3Y!&7d6EQgcz0L&BfhB8XAEG*OV;By#TtV*=f31HAprz&<$`{lO9 zi)Oxl^7k7bc<k!m{&8_tyOy@X+4?(n+fRPrSNIX zmfUjHlqu`RyS>4+fo8|=b@fB$UOlQ-Z)@v*zGuZ2&YZ%vn$Fq4`@T|2oevHc_ zyA)*!4y0x@J+AKd(*XVRDwii1;s$|ZThD$M@3eWn2a>5#O!J{kRhD048FVf(2Hq~q zQxshf1O$_+v zB+5w;e0EoS;7r|YVJ`_925*L5w;|9{ZwZapJe~;(p)_63f+akZTqYAAV=g=*bY^0# zz_PIpP?w38nYr2|Hkz6A*JHpHC6HUx>l8BeG_dRv!@CdH!N?J2qTxO8i zC^&t^65u6WFE`WGBtmNnI|BitJjolb%(Vnav_Wqf=`f9U1 z2)&{1=PvCg9TPAB0#6z65LaD1+;Jx6+3$n6B@I~7~10`zSHN{+P z4#!E$fX{Keen|&Br_>lSVZvJd&)xw3yu&e;aTsUQ$q(z|aUZe_c&%s8y@p9|3h#F0 z`TW=3dv~4DrScBNe!ZN=oS?G@xeE&RS_XW-%F1;HA>1r@t+4Pb@M1bT1J~%q7~$~9 zbQ^&$u;lW~*INes9rNaX>&(kLV1_(;FP_4lJM=_PiN{t+A1N9wU}@TSr_blVbN)Q* zXgo-$Xz-v~Zc;nl`T5@&UHqMHJ$jU5P&-}wUOe=&S~#>?2|T%L;Y)8bRsAh>P@L5N z@MD|N#m&58!uTULyS*8FO776K24cc|F{ktB?JvHtB2(?p82EzTy&EcPZeDDdc&5R> ze^S?tOb;%4xo*YrV>Js8`fnWf{!H&A%YW*MD_5U7 z@blPY#4uJGKK=& zaZ83`t{LCLcVxeR=z@vYt!Zy+Dov)P5pLk-BofB$dXUhGlxaMggj@YmiD=n#a}Un? z?Bi)Oh7I2nfjlf1?CzAJit=yodGn1~vZ@|UR?*JQNj`>2CO#Rr>B;eJeknjlyME7G z%V!l27_he^w$_t5rOP<@DwjvUWb~*_Gghv6Skbh)Wa~D#V1|%!r+@=BJ+X$9%v53C z_pe&{2$Z!E%QQ%4dwRyfvoKzg0q;HY>~&wQT76$fYwJb-CU2Xn9veP=>hfFXJ^v~E z{0TMvTrDUv literal 0 HcmV?d00001 diff --git a/src/qt/res/icons/GUI20_mainToolBar_info_hover.png b/src/qt/res/icons/GUI20_mainToolBar_info_hover.png new file mode 100644 index 0000000000000000000000000000000000000000..f2d34c538effc7fa1cb5ac5083030574636c297a GIT binary patch literal 969 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 literal 0 HcmV?d00001 diff --git a/src/qt/res/icons/GUI20_mainToolBar_receive_hover.png b/src/qt/res/icons/GUI20_mainToolBar_receive_hover.png new file mode 100644 index 0000000000000000000000000000000000000000..4a95a8ae08f76113f1b5257d6e8c868dfc752754 GIT binary patch literal 591 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 literal 0 HcmV?d00001 diff --git a/src/qt/res/icons/GUI20_mainToolBar_send.png b/src/qt/res/icons/GUI20_mainToolBar_send.png new file mode 100644 index 0000000000000000000000000000000000000000..06643f6e2833fe7808b63f9fab7a995111406acb GIT binary patch literal 1067 zcmV+`1l0S9P)grC6Ut7 zWOv@a-~CaxExO~HzN^o(yezvj@9eyvdFPq;d3Qz{V+6GNk^m3z01p8?z(W8J@DRWQ zJOuCn4*@*D1H1*`4lHhju692$|GrGhEhUYH6mO?MrWqiw9QV%^%Q!=w7%^N zamtla%o}rMCI~*y8_`4XE2bT)(x4OU{hkmvlS+$3zG!`)deClJL2aoh@U*iDU+dwx zQkr`^?|g*beIcX1KcG0{jYF%(0je zXJQ1saHlna=kLjauF)BApc3F$1b8jP*0^>CeIi$i7W@yUWbtzXdkRRCYU#Yo?E z2dFpKL>5@gzh?zoj$+H%;W=)vvb@(T+bxEyx>RG>a$?4G(izZUv*jpz zp=UzI&bZbOJf$)|UQ#g0T8emk?B6oP0plSiS<@!Zb%)rh z06v_>a5`;{mS8c(Er;L-rj539$wtdjHd+kz@D>V5w>(+8#fTz9OtvTrT-{_jyClFb zX)&BmU-~kePRl%ioN7G^Uc)@G2Jnlg)1FK^Rpk!|^QqQj%hLLeO_rnVv6y^1HD`;Z z(`AP*2A>_@-{1*0Ti{y*p3-JL4FLyuDCn&4KqQ}Pd4i26+5rCVbUH|uP`g+y4Y2VTIJ|`NPT9u1<)SYTMas0`ekK!!3y<QCR&yv(HBSCJUU>Swo&FkYKG_i) z?SIxE#{UEAOjNIzpucWUR?q#lj7o}@znl36t4UEGoil;>v7pRSp#w5k-`Myj6?%IV z3aB2}pDoxf|4zz++d!OR>1Y>4%b;&AML`sw3& zdJ8j$KG~M6wz^$->JQ)n9s+oPhX5YnA%F*X2;c!80(gK2cz_3ZfQJAc;30qqcnIJD l9s+oPhX5YnH@bcaFaT-bIKYn@Rqp@*002ovPDHLkV1i7)@hAWQ literal 0 HcmV?d00001 diff --git a/src/qt/res/icons/GUI20_mainToolBar_send_hover.png b/src/qt/res/icons/GUI20_mainToolBar_send_hover.png new file mode 100644 index 0000000000000000000000000000000000000000..7195ef961b573f9b28dde89516711280f8c65c38 GIT binary patch literal 607 zcmeAS@N?(olHy`uVBq!ia0vp^aX{?L!3HGtCtQvOQj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS=07?>D6T^vIyZoQdhtM44h(3W58llpmT1W%GM%g4PljvPq( z!0j^QPlMMF#w#j^_!A5aX0DV{>2Og>+|bb`!J*{x%J!sh)TK-FZr|JT^0UhM3*YX| z`*!kV=J~U{M;;fl|510SI3z5`;a{O(^RV$l3p<$eBWU>=5Bu_^cP9B49raO2+hebD z;^&g%#YR3q{#;V$PpQ0A{C<;noPeEu$jRWFa~^FqzNu^<@wnLE!neeEcTCE$=kpAA zem-v)Ulj39*v{PKL~-QogB#5^`Pyy1QZYxS$oBAyHns2iYR31JFBe^Xw1;!2Z-sT# zlTMzfIlnccpUOVmyx7Stb$k2w81zax@7;cPMQrnG*-7p#|2_BawqASsvBdRF&igi8 zQ7Kz4UD@|;hxZL5W4nV>Vm=q{DctE@alCSZsa;?B(|29oc6)YCig^3D;`_UNuaoOP zZZ>*$Il{2q=GqVYj488=E&`|-qjGy~&$5d6Q z?lI4?OL4sa#040t^FFkw+dSm-hcM4iNZRRZJ?ZJkJGwkTaRHz#B(PCJzTyz`Lr#8( hJTPXQwf3<}Fig21@-o9F8Y3PoY`vyCn z?;TkD^i#+8eX>`7^U?16M^BG*WR3d>V@IU?NVE7}xbD*gQ6iDeMl)nm9$s;CG_KTRiA?6;^`jo}li<}{`!)qFYfWP;_Iqnr*Kf-V4q}ygn)8(nKh<=daPxH*7m-b|BeP-YISb)!?+~#s?$Pe(+bNtbox<4xxzNe;cDVKy#xfVCwSZ1V5 zOqL8O2RZ(kYbbv%w`smj%cz#`RB3-xx+&nfsrz$@{^ozU>klR_e_t{1D`rK`RueVa zq&%BxS;oIgH2UqOi?NDXP6~Qh>-@;}D*1Bbx{Y4_eeKP&tvp4i!V1X4$Dj!TJm3+) z10DgqA7cBZBl0q^E*2YDyJz=@E!|ylz|YhRB7OzFYS+%!-*|RqUpANPDCQd3j>zzJ zX)-_VA0Kl>0)N>dd-smov8wq1VS|Moj?>07|dju}eLf1SeIviv0c)c@VEQp(7=bCa!1MdZoG zf$!i8IWaukFUPPh&xM=cmXl4jbE1dk?LPsRX5V7tUP?`EG2v4i)=`tm}IAc(GRlc)%lo2Rz~jcqbGpi~Vvt7>rjGe0%S6@9LoADZUj7 zUg&(G_dU;+zaD*PRX%vSh+EJ@`y{s^Zs#fqzTyLTzylruJm3+)10Df9;1R$B9sxYy z0S|b<10Df9;1R$B9sxYy5x@f;0esoyUjYUHB!|pEw5gUx00000NkvXXu0mjf$Tdx1 literal 0 HcmV?d00001 diff --git a/src/qt/res/icons/GUI20_mainToolBar_transactions_hover.png b/src/qt/res/icons/GUI20_mainToolBar_transactions_hover.png new file mode 100644 index 0000000000000000000000000000000000000000..682bad33cd761f1cd9ffd7d726ee6556510782c6 GIT binary patch literal 563 zcmeAS@N?(olHy`uVBq!ia0vp^aX{?L!3HGtCtQvOQj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS=07#Od5x;TbZ+wwW~SMFHZxXt zlxVZO_Jj2RGrtY9Tm_rW2cC)tk{=EjKWIGvYgW*|AHT0|s|qpCY7qXv{dKT(mfzNp zzyF+gneSVCIAwQb!rXtStfo{?T7SSjetlH<=T%#uoT^`K;N6^-?2u9 zS|9i?Q{$@}(rCXrxisZQ`Kp8q>k6-aJzBeWMc!AwKi{=)aK?w6eRXTX-IM#ah$s5^ zu6oHKze@PqBF6a5Wm^}eU7hNBOGfO!4eLPI20O75uk<@A2P%6wgKTs_*-E`Zjy&mAS=_9_RY&u4KRO z&mkTVvy+M6<^w3SfW&;eA4}H7oSwHpy=>uBkw2T*!>4~Qn>u@?_VqLTKFFrRN= qpT`IbS+Fj6@IqwmUjG(JV0d@eK6u~G^JTzPz~JfX=d#Wzp$P!BsRYOX literal 0 HcmV?d00001