Menu Toolbar version 1.1

This commit is contained in:
Jakub Rojek
2015-11-04 19:25:04 +01:00
parent 85a611ed19
commit 5db81053ef
34 changed files with 794 additions and 8 deletions

View File

@@ -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();
}

View File

@@ -0,0 +1,44 @@
#ifndef GUIMENUTOOLBARCONTROL_H
#define GUIMENUTOOLBARCONTROL_H
#include <QQuickItem>
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

View File

@@ -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();
}

View File

@@ -0,0 +1,36 @@
#ifndef GUIMENUTOOLBARLISTVIEW_H
#define GUIMENUTOOLBARLISTVIEW_H
#include <QQuickItem>
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

View File

@@ -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 <QQuickView>
#include <QQmlContext>
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<GUIMenuToolbarControl>("CasinoCoinControls", 1, 0, "GUIMenuToolbarControl" );
qmlRegisterType<GUIMenuToolbarListView>("CasinoCoinControls", 1, 0, "GUIMenuToolbarListView" );
qmlRegisterType<QmlMenuToolbarModel>("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<GUIMenuToolbarControl::EMenuToolbarItemTypes>( 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<GUIMenuToolbarControl*>();
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 ) ) );
}
}
}
}

View File

@@ -0,0 +1,34 @@
#ifndef GUIMENUTOOLBARWIDGET_H
#define GUIMENUTOOLBARWIDGET_H
#include <QWidget>
#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

View File

@@ -22,8 +22,9 @@ void QmlImageProvider::AddToImagePool( const QMap<QString, QImage>& 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 )
{

View File

@@ -0,0 +1,37 @@
#include "qmlmenutoolbaritem.h"
#include <QDebug>
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<int, QByteArray> QmlMenuToolbarItem::RoleNames() const
{
QHash<int, QByteArray> 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;
}

View File

@@ -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<int, QByteArray> RoleNames() const; /** Define class-specific roles **/
};
#endif // QMLMENUTOOLBARITEM_H

View File

@@ -0,0 +1,15 @@
#include "qmlmenutoolbarmodel.h"
#include "qmlmenutoolbaritem.h"
#include <QDebug>
QmlMenuToolbarModel::QmlMenuToolbarModel( QObject* a_pParent )
: QmlListModel( new QmlMenuToolbarItem(), a_pParent )
{
}
QmlMenuToolbarModel::~QmlMenuToolbarModel()
{
}

View File

@@ -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