From c3d223d8cbb71bf2a1ddee6e019435e2f36d0cf1 Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Sat, 24 Sep 2011 15:20:44 +0200 Subject: [PATCH] completed dropmenu in audio controls area --- src/audiocontrols.cpp | 21 +++++++++++++++++++++ src/libtomahawk/utils/dropmenu.cpp | 12 ++++++++++++ src/libtomahawk/utils/dropmenu.h | 3 +++ 3 files changed, 36 insertions(+) diff --git a/src/audiocontrols.cpp b/src/audiocontrols.cpp index a23730d43..c5cc230d4 100644 --- a/src/audiocontrols.cpp +++ b/src/audiocontrols.cpp @@ -162,6 +162,7 @@ AudioControls::AudioControls( QWidget* parent ) connect( &m_dropAreaCollapseTimer, SIGNAL( timeout() ), this, SLOT( collapseDropMenu() ) ); connect( ui->metaDataDropArea, SIGNAL( dropReceived( QDropEvent* ) ), this, SLOT( dropReceived( QDropEvent* ) ) ); + connect( ui->metaDataDropArea, SIGNAL( mouseLeft() ), &m_dropAreaCollapseTimer, SLOT( start() ) ); DropMenuEntry *trackEntry = new DropMenuEntry( QPixmap(":/data/images/drop-song.png" ).scaledToWidth( 32, Qt::SmoothTransformation ), "Track", @@ -611,6 +612,21 @@ AudioControls::dragEnterEvent( QDragEnterEvent* e ) m_dropAreaCollapseTimer.stop(); + DropJob::DropFlags flags = DropJob::DropFlagsNone; + + if ( e->mimeData()->hasFormat( "application/tomahawk.query.list" ) + || e->mimeData()->hasFormat( "application/tomahawk.result.list" ) + || e->mimeData()->hasFormat( "application/tomahawk.result" ) ) + flags = DropJob::DropFlagsAll; + + if ( e->mimeData()->hasFormat( "application/tomahawk.metadata.album" ) ) + flags = DropJob::DropFlagAlbum | DropJob::DropFlagArtist | DropJob::DropFlagLocal | DropJob::DropFlagTop10; + + if ( e->mimeData()->hasFormat( "application/tomahawk.metadata.artist" ) ) + flags = DropJob::DropFlagArtist | DropJob::DropFlagLocal | DropJob::DropFlagTop10; + + ui->metaDataDropArea->setFilter( flags ); + if( !m_dropAreaExpanded ) { m_dragAnimation->stop(); @@ -635,6 +651,7 @@ AudioControls::dragMoveEvent( QDragMoveEvent* /* e */ ) void AudioControls::dragLeaveEvent( QDragLeaveEvent * ) { + qDebug() << "******************************** dragLeaveEvent" << ui->metaDataDropArea->hovered(); if( !ui->metaDataDropArea->hovered() ) m_dropAreaCollapseTimer.start(); } @@ -643,6 +660,10 @@ AudioControls::dragLeaveEvent( QDragLeaveEvent * ) void AudioControls::collapseDropMenu() { + // Check if the menu is hovered now... + if( ui->metaDataDropArea->hovered() ) + return; + m_dropAreaExpanded = false; m_dragAnimation->stop(); diff --git a/src/libtomahawk/utils/dropmenu.cpp b/src/libtomahawk/utils/dropmenu.cpp index 3b959de11..a12066f2c 100644 --- a/src/libtomahawk/utils/dropmenu.cpp +++ b/src/libtomahawk/utils/dropmenu.cpp @@ -32,6 +32,17 @@ DropMenu::addEntry( DropMenuEntry *entry, bool isDefault ) m_defaultEntry = entry; } +void +DropMenu::setFilter(DropJob::DropFlags shownEntries) +{ + foreach( DropMenuEntry *entry, m_entries ) + { + if( ( entry->dropFlags() & shownEntries ) != DropJob::DropFlagsNone ) + entry->setVisible( true ); + else + entry->setVisible( false ); + } +} bool DropMenu::hovered() const @@ -67,6 +78,7 @@ DropMenu::entryLeft( DropMenuEntry *entry ) entry->setActive( false ); m_defaultEntry->setActive( true ); m_activeEntry = m_defaultEntry; + emit mouseLeft(); } diff --git a/src/libtomahawk/utils/dropmenu.h b/src/libtomahawk/utils/dropmenu.h index b218a72a0..f4f8cbc6e 100644 --- a/src/libtomahawk/utils/dropmenu.h +++ b/src/libtomahawk/utils/dropmenu.h @@ -18,6 +18,8 @@ public: void addEntry( DropMenuEntry *entry, bool isDefault = false ); + void setFilter( DropJob::DropFlags shownEntries ); + /** @brief Returns true if the mouse is somewhere over the contained entries */ bool hovered() const; @@ -26,6 +28,7 @@ public: signals: void dropReceived( QDropEvent *event ); + void mouseLeft(); private slots: void entryHovered( DropMenuEntry* entry );