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 0000000..49bf710 Binary files /dev/null and b/src/qt/res/icons/GUI20_mainToolBar_contacts.png differ 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 0000000..385adb8 Binary files /dev/null and b/src/qt/res/icons/GUI20_mainToolBar_contacts_hover.png differ 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 0000000..2ad49df Binary files /dev/null and b/src/qt/res/icons/GUI20_mainToolBar_info.png differ 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 0000000..f2d34c5 Binary files /dev/null and b/src/qt/res/icons/GUI20_mainToolBar_info_hover.png differ diff --git a/src/qt/res/icons/GUI20_mainToolBar_overview.png b/src/qt/res/icons/GUI20_mainToolBar_overview.png new file mode 100644 index 0000000..c8f8b7a Binary files /dev/null and b/src/qt/res/icons/GUI20_mainToolBar_overview.png differ diff --git a/src/qt/res/icons/GUI20_mainToolBar_overview_hover.png b/src/qt/res/icons/GUI20_mainToolBar_overview_hover.png new file mode 100644 index 0000000..14bb52e Binary files /dev/null and b/src/qt/res/icons/GUI20_mainToolBar_overview_hover.png differ diff --git a/src/qt/res/icons/GUI20_mainToolBar_receive.png b/src/qt/res/icons/GUI20_mainToolBar_receive.png new file mode 100644 index 0000000..1e0eaed Binary files /dev/null and b/src/qt/res/icons/GUI20_mainToolBar_receive.png differ 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 0000000..4a95a8a Binary files /dev/null and b/src/qt/res/icons/GUI20_mainToolBar_receive_hover.png differ diff --git a/src/qt/res/icons/GUI20_mainToolBar_redeemprypto.png b/src/qt/res/icons/GUI20_mainToolBar_redeemprypto.png new file mode 100644 index 0000000..ec992c4 Binary files /dev/null and b/src/qt/res/icons/GUI20_mainToolBar_redeemprypto.png differ diff --git a/src/qt/res/icons/GUI20_mainToolBar_redeemprypto_hover.png b/src/qt/res/icons/GUI20_mainToolBar_redeemprypto_hover.png new file mode 100644 index 0000000..47d6e05 Binary files /dev/null and b/src/qt/res/icons/GUI20_mainToolBar_redeemprypto_hover.png differ 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 0000000..06643f6 Binary files /dev/null and b/src/qt/res/icons/GUI20_mainToolBar_send.png differ 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 0000000..7195ef9 Binary files /dev/null and b/src/qt/res/icons/GUI20_mainToolBar_send_hover.png differ diff --git a/src/qt/res/icons/GUI20_mainToolBar_transactions.png b/src/qt/res/icons/GUI20_mainToolBar_transactions.png new file mode 100644 index 0000000..2d1cebb Binary files /dev/null and b/src/qt/res/icons/GUI20_mainToolBar_transactions.png differ 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 0000000..682bad3 Binary files /dev/null and b/src/qt/res/icons/GUI20_mainToolBar_transactions_hover.png differ