diff --git a/include/ResourceBrowser.h b/include/ResourceBrowser.h index 3e4d1b70b..961b9e312 100644 --- a/include/ResourceBrowser.h +++ b/include/ResourceBrowser.h @@ -26,12 +26,13 @@ #ifndef _RESOURCE_BROWSER_H #define _RESOURCE_BROWSER_H +#include "ResourcePreviewer.h" +#include "ResourceTreeModel.h" #include "side_bar_widget.h" class QAction; class QLabel; class ResourceItem; -class ResourceTreeModel; class ResourceTreeView; @@ -60,6 +61,8 @@ public: private slots: void showContextMenu( const QPoint & _pos ); void updateFilterStatus(); + void startItemPreview( const QModelIndex & _idx ); + void stopItemPreview( const QModelIndex & _idx ); private: @@ -67,7 +70,13 @@ private: QAction * m_actions[NumActions]; - ResourceTreeModel * m_treeModel; + // the object that will preview individual resources + ResourcePreviewer m_previewer; + + // our tree model on-top of a ResourceDB + ResourceTreeModel m_treeModel; + + // a view for the tree model ResourceTreeView * m_treeView; QLabel * m_filterStatusLabel; diff --git a/src/gui/ResourceBrowser.cpp b/src/gui/ResourceBrowser.cpp index eeb770422..bbad7f06f 100644 --- a/src/gui/ResourceBrowser.cpp +++ b/src/gui/ResourceBrowser.cpp @@ -70,11 +70,11 @@ static ActionDesc resourceBrowserActions[] = ResourceBrowser::ResourceBrowser( QWidget * _parent ) : sideBarWidget( tr( "Resource Browser" ), embed::getIconPixmap( "resource_browser" ), - _parent ) + _parent ), + m_previewer(), + m_treeModel( engine::resourceProvider()->database() ) { // create a model which represents our database as a tree - m_treeModel = new ResourceTreeModel( - engine::resourceProvider()->database() ); // create filter UI QHBoxLayout * filterLayout = new QHBoxLayout; @@ -91,7 +91,7 @@ ResourceBrowser::ResourceBrowser( QWidget * _parent ) : filterLayout->addWidget( m_filterStatusLabel ); // create an according tree-view for our tree-model - m_treeView = new ResourceTreeView( m_treeModel, contentParent() ); + m_treeView = new ResourceTreeView( &m_treeModel, contentParent() ); // set up context menu handling m_treeView->setContextMenuPolicy( Qt::CustomContextMenu ); @@ -99,6 +99,14 @@ ResourceBrowser::ResourceBrowser( QWidget * _parent ) : SIGNAL( customContextMenuRequested( const QPoint & ) ), this, SLOT( showContextMenu( const QPoint & ) ) ); + // track mouse press and release events + connect( m_treeView, + SIGNAL( pressed( const QModelIndex & ) ), + this, SLOT( startItemPreview( const QModelIndex & ) ) ); + connect( m_treeView, + SIGNAL( clicked( const QModelIndex & ) ), + this, SLOT( stopItemPreview( const QModelIndex & ) ) ); + // add widgets/layouts to us (we're a SideBarWidget) addContentLayout( filterLayout ); addContentWidget( m_treeView ); @@ -109,11 +117,11 @@ ResourceBrowser::ResourceBrowser( QWidget * _parent ) : m_treeView, SLOT( setFilter( const QString & ) ) ); connect( filterEdit, SIGNAL( textChanged( const QString & ) ), this, SLOT( updateFilterStatus() ) ); - connect( m_treeModel, SIGNAL( itemsChanged() ), + connect( &m_treeModel, SIGNAL( itemsChanged() ), this, SLOT( updateFilterStatus() ) ); // setup actions to be used in context menu - for( int i = 0;i < (int) ( sizeof( resourceBrowserActions ) / + for( int i = 0; i < (int) ( sizeof( resourceBrowserActions ) / sizeof( ActionDesc ) ); ++i ) { Actions a = resourceBrowserActions[i].action; @@ -135,7 +143,6 @@ ResourceBrowser::ResourceBrowser( QWidget * _parent ) : ResourceBrowser::~ResourceBrowser() { delete m_treeView; - delete m_treeModel; } @@ -153,7 +160,7 @@ void ResourceBrowser::showContextMenu( const QPoint & _pos ) // construct menu depending on selected item QMenu m; - ResourceItem * item = m_treeModel->item( idx ); + ResourceItem * item = m_treeModel.item( idx ); switch( item->type() ) { case ResourceItem::TypeSample: @@ -210,11 +217,30 @@ void ResourceBrowser::showContextMenu( const QPoint & _pos ) +void ResourceBrowser::startItemPreview( const QModelIndex & _idx ) +{ + if( _idx.isValid() ) + { + m_previewer.preview( m_treeModel.item( _idx ) ); + } +} + + + + +void ResourceBrowser::stopItemPreview( const QModelIndex & _idx ) +{ + m_previewer.stopPreview(); +} + + + + void ResourceBrowser::updateFilterStatus() { m_filterStatusLabel->setText( QString( "%1/%2" ). - arg( m_treeModel->shownItems() ). - arg( m_treeModel->totalItems() ) ); + arg( m_treeModel.shownItems() ). + arg( m_treeModel.totalItems() ) ); }