ResourceBrowser: preview resource while holding down mouse button
Use our ResourcePreviewer object to actually playback preview sounds while holding down mouse button. Signed-off-by: Tobias Doerffel <tobias.doerffel@gmail.com>
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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() ) );
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user