mirror of
https://github.com/tomahawk-player/tomahawk.git
synced 2025-08-06 14:16:32 +02:00
* Added context menu to item views.
This commit is contained in:
@@ -32,6 +32,7 @@
|
|||||||
#include "AlbumItem.h"
|
#include "AlbumItem.h"
|
||||||
#include "AlbumItemDelegate.h"
|
#include "AlbumItemDelegate.h"
|
||||||
#include "AlbumModel.h"
|
#include "AlbumModel.h"
|
||||||
|
#include "ContextMenu.h"
|
||||||
#include "ViewManager.h"
|
#include "ViewManager.h"
|
||||||
#include "utils/Logger.h"
|
#include "utils/Logger.h"
|
||||||
#include "utils/AnimatedSpinner.h"
|
#include "utils/AnimatedSpinner.h"
|
||||||
@@ -48,6 +49,7 @@ AlbumView::AlbumView( QWidget* parent )
|
|||||||
, m_delegate( 0 )
|
, m_delegate( 0 )
|
||||||
, m_loadingSpinner( new AnimatedSpinner( this ) )
|
, m_loadingSpinner( new AnimatedSpinner( this ) )
|
||||||
, m_overlay( new OverlayWidget( this ) )
|
, m_overlay( new OverlayWidget( this ) )
|
||||||
|
, m_contextMenu( new ContextMenu( this ) )
|
||||||
, m_inited( false )
|
, m_inited( false )
|
||||||
{
|
{
|
||||||
setDragEnabled( true );
|
setDragEnabled( true );
|
||||||
@@ -57,18 +59,20 @@ AlbumView::AlbumView( QWidget* parent )
|
|||||||
setSpacing( 0 );
|
setSpacing( 0 );
|
||||||
setContentsMargins( 0, 0, 0, 0 );
|
setContentsMargins( 0, 0, 0, 0 );
|
||||||
setMouseTracking( true );
|
setMouseTracking( true );
|
||||||
|
setContextMenuPolicy( Qt::CustomContextMenu );
|
||||||
setStyleSheet( "QListView { background-color: #323435; }" );
|
|
||||||
|
|
||||||
setResizeMode( Adjust );
|
setResizeMode( Adjust );
|
||||||
setViewMode( IconMode );
|
setViewMode( IconMode );
|
||||||
setVerticalScrollMode( QAbstractItemView::ScrollPerPixel );
|
setVerticalScrollMode( QAbstractItemView::ScrollPerPixel );
|
||||||
setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOn );
|
setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOn );
|
||||||
|
|
||||||
|
setStyleSheet( "QListView { background-color: #323435; }" );
|
||||||
|
|
||||||
setAutoFitItems( true );
|
setAutoFitItems( true );
|
||||||
setProxyModel( new AlbumProxyModel( this ) );
|
setProxyModel( new AlbumProxyModel( this ) );
|
||||||
|
|
||||||
connect( this, SIGNAL( doubleClicked( QModelIndex ) ), SLOT( onItemActivated( QModelIndex ) ) );
|
connect( this, SIGNAL( doubleClicked( QModelIndex ) ), SLOT( onItemActivated( QModelIndex ) ) );
|
||||||
|
connect( this, SIGNAL( customContextMenuRequested( QPoint ) ), SLOT( onCustomContextMenu( QPoint ) ) );
|
||||||
|
// connect( m_contextMenu, SIGNAL( triggered( int ) ), SLOT( onMenuTriggered( int ) ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -259,3 +263,42 @@ AlbumView::startDrag( Qt::DropActions supportedActions )
|
|||||||
|
|
||||||
/* Qt::DropAction action = */ drag->exec( supportedActions, Qt::CopyAction );
|
/* Qt::DropAction action = */ drag->exec( supportedActions, Qt::CopyAction );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
AlbumView::onCustomContextMenu( const QPoint& pos )
|
||||||
|
{
|
||||||
|
m_contextMenu->clear();
|
||||||
|
|
||||||
|
QModelIndex idx = indexAt( pos );
|
||||||
|
idx = idx.sibling( idx.row(), 0 );
|
||||||
|
m_contextMenuIndex = idx;
|
||||||
|
|
||||||
|
if ( !idx.isValid() )
|
||||||
|
return;
|
||||||
|
|
||||||
|
QList<query_ptr> queries;
|
||||||
|
QList<artist_ptr> artists;
|
||||||
|
QList<album_ptr> albums;
|
||||||
|
|
||||||
|
foreach ( const QModelIndex& index, selectedIndexes() )
|
||||||
|
{
|
||||||
|
if ( index.column() || selectedIndexes().contains( index.parent() ) )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
AlbumItem* item = m_model->itemFromIndex( m_proxyModel->mapToSource( index ) );
|
||||||
|
|
||||||
|
if ( item && !item->query().isNull() )
|
||||||
|
queries << item->query();
|
||||||
|
else if ( item && !item->artist().isNull() )
|
||||||
|
artists << item->artist();
|
||||||
|
else if ( item && !item->album().isNull() )
|
||||||
|
albums << item->album();
|
||||||
|
}
|
||||||
|
|
||||||
|
m_contextMenu->setQueries( queries );
|
||||||
|
m_contextMenu->setArtists( artists );
|
||||||
|
m_contextMenu->setAlbums( albums );
|
||||||
|
|
||||||
|
m_contextMenu->exec( viewport()->mapToGlobal( pos ) );
|
||||||
|
}
|
||||||
|
@@ -29,6 +29,11 @@
|
|||||||
#include "widgets/OverlayWidget.h"
|
#include "widgets/OverlayWidget.h"
|
||||||
#include "DllMacro.h"
|
#include "DllMacro.h"
|
||||||
|
|
||||||
|
namespace Tomahawk
|
||||||
|
{
|
||||||
|
class ContextMenu;
|
||||||
|
};
|
||||||
|
|
||||||
class AlbumModel;
|
class AlbumModel;
|
||||||
class AnimatedSpinner;
|
class AnimatedSpinner;
|
||||||
class AlbumItemDelegate;
|
class AlbumItemDelegate;
|
||||||
@@ -82,8 +87,8 @@ protected slots:
|
|||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void onItemCountChanged( unsigned int items );
|
void onItemCountChanged( unsigned int items );
|
||||||
|
|
||||||
void onFilterChanged( const QString& filter );
|
void onFilterChanged( const QString& filter );
|
||||||
|
void onCustomContextMenu( const QPoint& pos );
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void adjustItemSize( const QRect& rect );
|
void adjustItemSize( const QRect& rect );
|
||||||
@@ -94,6 +99,9 @@ private:
|
|||||||
AnimatedSpinner* m_loadingSpinner;
|
AnimatedSpinner* m_loadingSpinner;
|
||||||
OverlayWidget* m_overlay;
|
OverlayWidget* m_overlay;
|
||||||
|
|
||||||
|
QModelIndex m_contextMenuIndex;
|
||||||
|
Tomahawk::ContextMenu* m_contextMenu;
|
||||||
|
|
||||||
bool m_inited;
|
bool m_inited;
|
||||||
bool m_autoFitItems;
|
bool m_autoFitItems;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user