1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-08-11 16:44:05 +02:00

more work the dropmenu for the audiocontrols

This commit is contained in:
Michael Zanetti
2011-09-04 20:54:16 +02:00
parent a3ae74dc10
commit b2f3dedaff
10 changed files with 445 additions and 90 deletions

View File

@@ -47,6 +47,7 @@ AudioControls::AudioControls( QWidget* parent )
, ui( new Ui::AudioControls )
, m_repeatMode( PlaylistInterface::NoRepeat )
, m_shuffled( false )
, m_dropAreaExpanded( false )
{
ui->setupUi( this );
setAcceptDrops( true );
@@ -151,57 +152,86 @@ AudioControls::AudioControls( QWidget* parent )
m_dragAnimation = new QPropertyAnimation( this, "dropAreaSize", this );
m_dragAnimation->setStartValue( 0 );
m_dragAnimation->setDuration( 500 );
m_dragAnimation->setEasingCurve( QEasingCurve::OutExpo );
m_dragAnimation->setEasingCurve( QEasingCurve::Linear );
connect( m_dragAnimation, SIGNAL( finished() ), SLOT(dragAnimationFinished()));
QGridLayout *dropMenuLayout = new QGridLayout;
ui->metaDataDropArea->setLayout( dropMenuLayout );
m_dropAreaCollapseTimer.setInterval( 500 );
m_dropAreaCollapseTimer.setSingleShot( true );
connect( &m_dropAreaCollapseTimer, SIGNAL( timeout() ), this, SLOT( collapseDropMenu() ) );
QLabel* dropTrackImage = new QLabel;
dropTrackImage->setAlignment( Qt::AlignHCenter );
dropTrackImage->setPixmap( QPixmap(":/data/images/drop-song.png" ).scaledToWidth( 32, Qt::SmoothTransformation ) );
dropMenuLayout->addWidget( dropTrackImage, 0, 0 );
connect( ui->metaDataDropArea, SIGNAL( dropReceived( QDropEvent* ) ), this, SLOT( dropReceived( QDropEvent* ) ) );
QLabel* dropAlbumImage = new QLabel;
dropAlbumImage->setAlignment( Qt::AlignHCenter );
dropAlbumImage->setPixmap( QPixmap( ":/data/images/drop-album.png" ).scaledToWidth( 32, Qt::SmoothTransformation ) );
dropMenuLayout->addWidget( dropAlbumImage, 0, 1 );
DropMenuEntry *trackEntry = new DropMenuEntry( QPixmap(":/data/images/drop-song.png" ).scaledToWidth( 32, Qt::SmoothTransformation ),
"Track",
DropJob::DropFlagTrack );
ui->metaDataDropArea->addEntry( trackEntry, true );
QLabel* dropArtistImage = new QLabel;
dropArtistImage->setAlignment( Qt::AlignHCenter );
dropArtistImage->setPixmap( QPixmap( ":/data/images/drop-all-songs.png" ).scaledToWidth( 32, Qt::SmoothTransformation ) );
dropMenuLayout->addWidget( dropArtistImage, 0, 2 );
DropMenuEntry *albumEntry = new DropMenuEntry( QPixmap(":/data/images/drop-album.png" ).scaledToWidth( 32, Qt::SmoothTransformation ),
"Album",
DropJob::DropFlagAlbum );
ui->metaDataDropArea->addEntry( albumEntry );
QLabel* dropLocalImage = new QLabel;
dropLocalImage->setAlignment( Qt::AlignHCenter );
dropLocalImage->setPixmap( QPixmap( ":/data/images/drop-local-songs.png" ).scaledToWidth( 32, Qt::SmoothTransformation ) );
dropMenuLayout->addWidget( dropLocalImage, 0, 3 );
DropMenuEntry *artistEntry = new DropMenuEntry( QPixmap(":/data/images/drop-all-songs.png" ).scaledToWidth( 32, Qt::SmoothTransformation ),
"Artist",
DropJob::DropFlagArtist );
ui->metaDataDropArea->addEntry( artistEntry );
QLabel* dropTop10Image = new QLabel;
dropTop10Image->setAlignment( Qt::AlignHCenter );
dropTop10Image->setPixmap( QPixmap( ":/data/images/drop-top-songs.png" ).scaledToWidth( 32, Qt::SmoothTransformation ) );
dropMenuLayout->addWidget( dropTop10Image, 0, 4 );
DropMenuEntry *localEntry = new DropMenuEntry( QPixmap(":/data/images/drop-local-songs.png" ).scaledToWidth( 32, Qt::SmoothTransformation ),
"Local",
DropJob::DropFlagAlbum | DropJob::DropFlagLocal );
ui->metaDataDropArea->addEntry( localEntry );
QLabel* dropAllText = new QLabel( "Track" );
dropAllText->setAlignment( Qt::AlignHCenter );
dropMenuLayout->addWidget( dropAllText, 1, 0 );
DropMenuEntry *top10Entry = new DropMenuEntry( QPixmap(":/data/images/drop-top-songs.png" ).scaledToWidth( 32, Qt::SmoothTransformation ),
"Top 10",
DropJob::DropFlagArtist | DropJob::DropFlagTop10 );
ui->metaDataDropArea->addEntry( top10Entry );
QLabel* dropAlbumText = new QLabel( "Album" );
dropAlbumText->setAlignment( Qt::AlignHCenter );
dropMenuLayout->addWidget( dropAlbumText, 1, 1 );
// QLabel* dropTrackImage = new QLabel;
// dropTrackImage->setAlignment( Qt::AlignHCenter );
// dropTrackImage->setPixmap( QPixmap(":/data/images/drop-song.png" ).scaledToWidth( 32, Qt::SmoothTransformation ) );
// dropMenuLayout->addWidget( dropTrackImage, 0, 0 );
QLabel* dropArtistText = new QLabel( "Artist" );
dropArtistText->setAlignment( Qt::AlignHCenter );
dropMenuLayout->addWidget( dropArtistText, 1, 2 );
// QLabel* dropAlbumImage = new QLabel;
// dropAlbumImage->setAlignment( Qt::AlignHCenter );
// dropAlbumImage->setPixmap( QPixmap( ":/data/images/drop-album.png" ).scaledToWidth( 32, Qt::SmoothTransformation ) );
// dropMenuLayout->addWidget( dropAlbumImage, 0, 1 );
QLabel* dropLocalText = new QLabel( "Local" );
dropLocalText->setAlignment( Qt::AlignHCenter );
dropMenuLayout->addWidget( dropLocalText, 1, 3 );
// QLabel* dropArtistImage = new QLabel;
// dropArtistImage->setAlignment( Qt::AlignHCenter );
// dropArtistImage->setPixmap( QPixmap( ":/data/images/drop-all-songs.png" ).scaledToWidth( 32, Qt::SmoothTransformation ) );
// dropMenuLayout->addWidget( dropArtistImage, 0, 2 );
QLabel* dropTop10Text = new QLabel( "Top 10" );
dropTop10Text->setAlignment( Qt::AlignHCenter );
dropMenuLayout->addWidget( dropTop10Text, 1, 4 );
// QLabel* dropLocalImage = new QLabel;
// dropLocalImage->setAlignment( Qt::AlignHCenter );
// dropLocalImage->setPixmap( QPixmap( ":/data/images/drop-local-songs.png" ).scaledToWidth( 32, Qt::SmoothTransformation ) );
// dropMenuLayout->addWidget( dropLocalImage, 0, 3 );
// QLabel* dropTop10Image = new QLabel;
// dropTop10Image->setAlignment( Qt::AlignHCenter );
// dropTop10Image->setPixmap( QPixmap( ":/data/images/drop-top-songs.png" ).scaledToWidth( 32, Qt::SmoothTransformation ) );
// dropMenuLayout->addWidget( dropTop10Image, 0, 4 );
// QLabel* dropAllText = new QLabel( "Track" );
// dropAllText->setAlignment( Qt::AlignHCenter );
// dropMenuLayout->addWidget( dropAllText, 1, 0 );
// QLabel* dropAlbumText = new QLabel( "Album" );
// dropAlbumText->setAlignment( Qt::AlignHCenter );
// dropMenuLayout->addWidget( dropAlbumText, 1, 1 );
// QLabel* dropArtistText = new QLabel( "Artist" );
// dropArtistText->setAlignment( Qt::AlignHCenter );
// dropMenuLayout->addWidget( dropArtistText, 1, 2 );
// QLabel* dropLocalText = new QLabel( "Local" );
// dropLocalText->setAlignment( Qt::AlignHCenter );
// dropMenuLayout->addWidget( dropLocalText, 1, 3 );
// QLabel* dropTop10Text = new QLabel( "Top 10" );
// dropTop10Text->setAlignment( Qt::AlignHCenter );
// dropMenuLayout->addWidget( dropTop10Text, 1, 4 );
}
@@ -579,10 +609,17 @@ AudioControls::dragEnterEvent( QDragEnterEvent* e )
{
e->acceptProposedAction();
m_dragAnimation->setStartValue( 0 );
m_dragAnimation->setEndValue( ui->metaDataArea->height() );
m_dragAnimation->setDirection( QAbstractAnimation::Forward );
m_dragAnimation->start();
m_dropAreaCollapseTimer.stop();
if( !m_dropAreaExpanded )
{
m_dragAnimation->stop();
m_dragAnimation->setDirection( QAbstractAnimation::Forward );
m_dragAnimation->setStartValue( dropAreaSize() );
m_dragAnimation->setEndValue( ui->metaDataArea->height() );
m_dragAnimation->start();
m_dropAreaExpanded = true;
}
}
}
@@ -598,12 +635,21 @@ AudioControls::dragMoveEvent( QDragMoveEvent* /* e */ )
void
AudioControls::dragLeaveEvent( QDragLeaveEvent * )
{
ui->metaDataInfoArea->setMaximumHeight( 1000 );
ui->metaDataDropArea->setMaximumHeight( 0 );
if( !ui->metaDataDropArea->hovered() )
m_dropAreaCollapseTimer.start();
}
m_dragAnimation->setDirection( QAbstractAnimation::Backward );
void
AudioControls::collapseDropMenu()
{
m_dropAreaExpanded = false;
m_dragAnimation->stop();
// m_dragAnimation->setDirection( QAbstractAnimation::Backward );
m_dragAnimation->setStartValue( dropAreaSize() );
m_dragAnimation->setEndValue( 0 );
m_dragAnimation->start();
}
@@ -615,8 +661,11 @@ AudioControls::dropEvent( QDropEvent* e )
{
DropJob *dj = new DropJob();
connect( dj, SIGNAL( tracks( QList<Tomahawk::query_ptr> ) ), this, SLOT( droppedTracks( QList<Tomahawk::query_ptr> ) ) );
dj->setDropFlags( ui->metaDataDropArea->activeEntry()->dropFlags() );
dj->tracksFromMimeData( e->mimeData() );
QTimer::singleShot( 0, this, SLOT( collapseDropMenu() ) );
e->accept();
}
}
@@ -688,3 +737,9 @@ AudioControls::setDropAreaSize( int size )
ui->metaDataDropArea->setMaximumHeight( size );
ui->metaDataInfoArea->setMaximumHeight( ui->metaDataArea->height() - size );
}
void
AudioControls::dropReceived( QDropEvent *event )
{
dropEvent( event );
}

View File

@@ -22,10 +22,12 @@
#include <QWidget>
#include <QTimeLine>
#include <QPropertyAnimation>
#include <QTimer>
#include "result.h"
#include "playlistinterface.h"
#include "infosystem/infosystem.h"
#include "utils/dropmenu.h"
class QDropEvent;
class QDragEnterEvent;
@@ -88,7 +90,9 @@ private slots:
void socialActionsLoaded();
void collapseDropMenu();
void dragAnimationFinished();
void dropReceived( QDropEvent *event );
private:
Ui::AudioControls *ui;
@@ -103,6 +107,8 @@ private:
qint64 m_seekMsecs;
QPropertyAnimation *m_dragAnimation;
bool m_dropAreaExpanded;
QTimer m_dropAreaCollapseTimer;
};
#endif // AUDIOCONTROLS_H

View File

@@ -130,7 +130,7 @@
<number>0</number>
</property>
<item>
<widget class="QWidget" name="metaDataDropArea" native="true">
<widget class="DropMenu" name="metaDataDropArea" native="true">
<property name="maximumSize">
<size>
<width>16777215</width>
@@ -565,6 +565,12 @@
<extends>QLabel</extends>
<header>utils/querylabel.h</header>
</customwidget>
<customwidget>
<class>DropMenu</class>
<extends>QWidget</extends>
<header>utils/dropmenu.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<resources/>
<connections/>

View File

@@ -183,6 +183,7 @@ set( libSources
utils/rdioparser.cpp
utils/shortenedlinkparser.cpp
utils/stylehelper.cpp
utils/dropmenu.cpp
widgets/newplaylistwidget.cpp
widgets/searchwidget.cpp
@@ -381,6 +382,7 @@ set( libHeaders
utils/rdioparser.h
utils/shortenedlinkparser.h
utils/stylehelper.h
utils/dropmenu.h
widgets/newplaylistwidget.h
widgets/searchwidget.h

View File

@@ -34,6 +34,7 @@ using namespace Tomahawk;
DropJob::DropJob( QObject *parent )
: QObject( parent )
, m_queryCount( 0 )
, m_dropFlags( DropFlagsNone )
{
}
@@ -98,31 +99,72 @@ DropJob::acceptsMimeData( const QMimeData* data, bool tracksOnly )
void
DropJob::setGetWholeArtists( bool getWholeArtists )
{
m_getWholeArtists = getWholeArtists;
if( getWholeArtists )
m_dropFlags |= DropFlagArtist;
else
m_dropFlags &= !DropFlagArtist;
}
void
DropJob::setGetWholeAlbums( bool getWholeAlbums )
{
m_getWholeAlbums = getWholeAlbums;
if ( getWholeAlbums )
m_dropFlags |= DropFlagAlbum;
else
m_dropFlags &= !DropFlagAlbum;
}
void
DropJob::tracksFromMimeData( const QMimeData* data, bool allowDuplicates, bool onlyLocal, bool top10 )
DropJob::setGetTop10( bool top10 )
{
m_allowDuplicates = allowDuplicates;
m_onlyLocal = onlyLocal;
m_top10 = top10;
if( top10 )
m_dropFlags |= DropFlagTop10;
else
m_dropFlags &= !DropFlagTop10;
}
void
DropJob::setOnlyLocal( bool onlyLocal )
{
if( onlyLocal )
m_dropFlags |= DropFlagLocal;
else
m_dropFlags &= !DropFlagLocal;
}
void
DropJob::setAllowDuplicates( bool allowDuplicates )
{
if( allowDuplicates )
m_dropFlags |= DropFlagAllowDuplicates;
else
m_dropFlags &= !DropFlagAllowDuplicates;
}
void
DropJob::setDropFlags( DropFlags flags )
{
m_dropFlags = flags;
}
void
DropJob::tracksFromMimeData( const QMimeData* data )
{
parseMimeData( data );
if ( m_queryCount == 0 )
{
if ( onlyLocal )
if ( m_dropFlags.testFlag( DropFlagLocal ) )
removeRemoteSources();
if ( !allowDuplicates )
if ( !m_dropFlags.testFlag( DropFlagAllowDuplicates ) )
removeDuplicates();
emit tracks( m_resultList );
@@ -171,15 +213,15 @@ DropJob::tracksFromQueryList( const QMimeData* data )
{
tDebug() << "Dropped query item:" << query->data()->artist() << "-" << query->data()->track();
if ( m_top10 )
if ( m_dropFlags.testFlag( DropFlagTop10 ) )
{
getTopTen( query->data()->artist() );
}
else if ( m_getWholeArtists )
else if ( m_dropFlags.testFlag( DropFlagArtist ) )
{
queries << getArtist( query->data()->artist() );
}
else if ( m_getWholeAlbums )
else if ( m_dropFlags.testFlag( DropFlagAlbum ) )
{
queries << getAlbum( query->data()->artist(), query->data()->album() );
}
@@ -211,15 +253,15 @@ DropJob::tracksFromResultList( const QMimeData* data )
tDebug() << "Dropped result item:" << result->data()->artist()->name() << "-" << result->data()->track();
query_ptr q = result->data()->toQuery();
if ( m_top10 )
if ( m_dropFlags.testFlag( DropFlagTop10 ) )
{
getTopTen( q->artist() );
}
else if ( m_getWholeArtists )
else if ( m_dropFlags.testFlag( DropFlagArtist ) )
{
queries << getArtist( q->artist() );
}
else if ( m_getWholeAlbums )
else if ( m_dropFlags.testFlag( DropFlagAlbum ) )
{
queries << getAlbum( q->artist(), q->album() );
}
@@ -248,9 +290,9 @@ DropJob::tracksFromAlbumMetaData( const QMimeData *data )
QString album;
stream >> album;
if ( m_top10 )
if ( m_dropFlags.testFlag( DropFlagTop10 ) )
getTopTen( artist );
else if ( m_getWholeArtists )
else if ( m_dropFlags.testFlag( DropFlagArtist ) )
queries << getArtist( artist );
else
queries << getAlbum( artist, album );
@@ -270,14 +312,10 @@ DropJob::tracksFromArtistMetaData( const QMimeData *data )
QString artist;
stream >> artist;
if ( !m_top10 )
{
queries << getArtist( artist );
}
else
{
if ( m_dropFlags.testFlag( DropFlagTop10 ) )
getTopTen( artist );
}
else
queries << getArtist( artist );
}
return queries;
}
@@ -381,10 +419,10 @@ DropJob::onTracksAdded( const QList<Tomahawk::query_ptr>& tracksList )
if ( --m_queryCount == 0 )
{
if ( m_onlyLocal )
if ( m_dropFlags.testFlag( DropFlagLocal ) )
removeRemoteSources();
if ( !m_allowDuplicates )
if ( !m_dropFlags.testFlag( DropFlagAllowDuplicates ) )
removeDuplicates();
emit tracks( m_resultList );

View File

@@ -28,10 +28,48 @@
#include <QStringList>
#include <QMimeData>
/** @class DropJob
* Allows you to process dropped mimedata in different ways:
* Configure the DropJob using setDropFlags() or the set*() functions to do
* what you want and then feed it with MimeMata. Connect to the tracks() signal
* to receive the results.
*
* Possible configuration flags are:
* - DropFlagTrack: Get the dropped track (only valid if the dropped item is acutally a track)
* - DropFlagAlbum: Get this album (only valid if the dropped item is an album or a track with album information)
* - DropFlagArtist: Get this artist
* - DropFlagTop10: Query the Top 10 for this artist in the Network
* - DropFlagLocal: Only get local items (Filters out all remote ones)
* - DropFlagAllowDuplicates: Allow duplicate results, e.g. same song from different sources.
*
* Note: The largest possible set of the configured Flags applies. E.g. Artist is greater than Album.
* If you set both of them only the album will be fetched. Requesting the Top 10 items always results in a
* query for the whole artist. It is not possible to e.g. request the Top 10 tracks of a given album.
*
* If you configure nothing or dropping incompatible data (e.g. configured DropTrack but dropping an album),
* the DropJob will do this default actions:
* - Get this track for dropped tracks
* - Get whole album for dropped albums
* - Get whole artist for dropped artists
*/
class DLLEXPORT DropJob : public QObject
{
Q_OBJECT
public:
enum DropFlag
{
DropFlagsNone = 0x00,
DropFlagTrack = 0x01,
DropFlagAlbum = 0x02,
DropFlagArtist = 0x04,
DropFlagTop10 = 0x08,
DropFlagLocal = 0x10,
DropFlagAllowDuplicates = 0x20,
DropFlagsAll = 0xff
};
Q_DECLARE_FLAGS( DropFlags, DropFlag )
explicit DropJob( QObject *parent = 0 );
~DropJob();
@@ -46,9 +84,15 @@ public:
static bool acceptsMimeData( const QMimeData* data, bool tracksOnly = true );
static QStringList mimeTypes();
void setDropFlags( DropFlags flags );
void setGetWholeArtists( bool getWholeArtists );
void setGetWholeAlbums( bool getWholeAlbums );
void tracksFromMimeData( const QMimeData* data, bool allowDuplicates = false, bool onlyLocal = false, bool top10 = false );
void setGetTop10( bool top10 );
void setOnlyLocal( bool onlyLocal );
void setAllowDuplicates( bool allowDuplicates );
void tracksFromMimeData( const QMimeData* data );
signals:
/// QMimeData parsing results
@@ -81,13 +125,10 @@ private:
void removeRemoteSources();
int m_queryCount;
bool m_allowDuplicates;
bool m_onlyLocal;
bool m_getWholeArtists;
bool m_getWholeAlbums;
bool m_top10;
DropFlags m_dropFlags;
QList< Tomahawk::query_ptr > m_resultList;
};
Q_DECLARE_OPERATORS_FOR_FLAGS( DropJob::DropFlags )
#endif // DROPJOB_H

View File

@@ -0,0 +1,141 @@
#include "dropmenu.h"
#include <QVBoxLayout>
#include <QLabel>
#include <QDragEnterEvent>
DropMenu::DropMenu( QWidget *parent )
: QWidget( parent )
{
setLayout( new QHBoxLayout() );
layout()->setSpacing( 0 );
}
void
DropMenu::addEntry( DropMenuEntry *entry, bool isDefault )
{
layout()->addWidget( entry );
if( m_entries.isEmpty() || isDefault )
m_activeEntry = entry;
m_entries.append( entry );
connect( entry, SIGNAL( mouseEntered( DropMenuEntry* ) ), this, SLOT( entryHovered( DropMenuEntry* ) ) );
connect( entry, SIGNAL( mouseLeft( DropMenuEntry* ) ), this, SLOT( entryLeft(DropMenuEntry*) ) );
connect( entry, SIGNAL( dropReceived( QDropEvent* ) ) , this, SIGNAL( dropReceived( QDropEvent* ) ) );
if( isDefault )
m_defaultEntry = entry;
}
bool
DropMenu::hovered() const
{
foreach( DropMenuEntry *entry, m_entries )
{
if( entry->hovered() )
return true;
}
return false;
}
DropMenuEntry*
DropMenu::activeEntry()
{
return m_activeEntry;
}
void
DropMenu::entryHovered( DropMenuEntry *entry )
{
m_activeEntry->setActive( false );
m_activeEntry = entry;
entry->setActive( true );
}
void
DropMenu::entryLeft( DropMenuEntry *entry )
{
entry->setActive( false );
m_defaultEntry->setActive( true );
m_activeEntry = m_defaultEntry;
}
DropMenuEntry::DropMenuEntry( const QPixmap &icon, const QString &text, DropJob::DropFlags flags, QWidget *parent )
: QWidget( parent )
, m_hovered( false )
, m_flags( flags )
{
QVBoxLayout *layout = new QVBoxLayout();
QLabel* image = new QLabel;
image->setAlignment( Qt::AlignHCenter );
image->setPixmap( icon );
layout->addWidget( image );
m_label = new QLabel( text );
m_label->setAlignment( Qt::AlignHCenter );
layout->addWidget( m_label );
setLayout( layout );
setAcceptDrops( true );
setMouseTracking( true );
}
void
DropMenuEntry::dragEnterEvent( QDragEnterEvent *event )
{
event->acceptProposedAction();
emit mouseEntered( this );
m_hovered = true;
}
void
DropMenuEntry::dragLeaveEvent( QDragLeaveEvent *event )
{
emit mouseLeft( this );
m_hovered = false;
}
void
DropMenuEntry::setActive( bool active )
{
QFont font = m_label->font();
font.setBold( active );
m_label->setFont( font );
}
void
DropMenuEntry::dropEvent( QDropEvent *event )
{
emit dropReceived( event );
m_hovered = false;
}
bool
DropMenuEntry::hovered() const
{
return m_hovered;
}
DropJob::DropFlags
DropMenuEntry::dropFlags() const
{
return m_flags;
}

View File

@@ -0,0 +1,70 @@
#ifndef DROPMENU_H
#define DROPMENU_H
#include "dllmacro.h"
#include "dropjob.h"
#include <QWidget>
#include <QLabel>
class DropMenuEntry;
class DLLEXPORT DropMenu: public QWidget
{
Q_OBJECT
public:
/** @brief Create a DropMenu with the given default flags if an invalid/empty area is hovered */
explicit DropMenu( QWidget *parent = 0 );
void addEntry( DropMenuEntry *entry, bool isDefault = false );
/** @brief Returns true if the mouse is somewhere over the contained entries */
bool hovered() const;
DropMenuEntry *activeEntry();
signals:
void dropReceived( QDropEvent *event );
private slots:
void entryHovered( DropMenuEntry* entry );
void entryLeft( DropMenuEntry* entry );
private:
QList< DropMenuEntry* > m_entries;
DropJob::DropFlags m_defaultFlags;
DropMenuEntry *m_defaultEntry;
DropMenuEntry *m_activeEntry;
};
class DLLEXPORT DropMenuEntry : public QWidget
{
Q_OBJECT
public:
explicit DropMenuEntry( const QPixmap &icon, const QString &text, DropJob::DropFlags flags, QWidget *parent = 0 );
void setActive( bool active );
bool hovered() const;
DropJob::DropFlags dropFlags() const;
signals:
void dropReceived( QDropEvent *event );
void mouseEntered( DropMenuEntry *entry );
void mouseLeft( DropMenuEntry *entry );
public slots:
protected:
virtual void dragEnterEvent( QDragEnterEvent *event );
virtual void dragLeaveEvent( QDragLeaveEvent *event );
virtual void dropEvent( QDropEvent *event );
private:
bool m_hovered;
QLabel *m_label;
DropJob::DropFlags m_flags;
};
#endif // DROPMENU_H

View File

@@ -259,15 +259,14 @@ CategoryAddItem::dropMimeData( const QMimeData* data, Qt::DropAction )
if ( dropType() == DropTypeLocalItems )
{
dj->setGetWholeArtists( true );
dj->tracksFromMimeData( data, false, true );
dj->setOnlyLocal( true );
}
else if ( dropType() == DropTypeTop50 )
{
dj->setGetWholeArtists( true );
dj->tracksFromMimeData( data, false, false, true );
dj->setGetTop10( true );
}
else
dj->tracksFromMimeData( data, false, false );
dj->tracksFromMimeData( data );
return true;
}

View File

@@ -183,15 +183,12 @@ PlaylistItem::dropMimeData( const QMimeData* data, Qt::DropAction action )
if ( dropType() == DropTypeLocalItems )
{
dj->setGetWholeArtists( true );
dj->tracksFromMimeData( data, false, true );
dj->setOnlyLocal( true );
}
else if ( dropType() == DropTypeTop50 )
{
dj->setGetWholeArtists( true );
dj->tracksFromMimeData( data, false, false, true );
}
else
dj->tracksFromMimeData( data, false, false );
dj->setGetTop10( true );
dj->tracksFromMimeData( data);
// TODO cant' know if it works or not yet...
return true;