1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-08-12 17:14:00 +02:00

Add Duration, Loudness, and Danceability

This commit is contained in:
Leo Franchi
2011-01-20 22:38:04 -05:00
parent 428021eded
commit 8e0bb5395a
3 changed files with 29 additions and 12 deletions

View File

@@ -164,6 +164,19 @@ Tomahawk::EchonestControl::updateWidgets()
m_currentType = Echonest::DynamicPlaylist::MinTempo; m_currentType = Echonest::DynamicPlaylist::MinTempo;
setupMinMaxWidgets( Echonest::DynamicPlaylist::MinTempo, Echonest::DynamicPlaylist::MaxTempo, tr( "0 BPM" ), tr( "500 BPM" ), 500 ); setupMinMaxWidgets( Echonest::DynamicPlaylist::MinTempo, Echonest::DynamicPlaylist::MaxTempo, tr( "0 BPM" ), tr( "500 BPM" ), 500 );
} else if( selectedType() == "Duration" ) {
m_currentType = Echonest::DynamicPlaylist::MinDuration;
setupMinMaxWidgets( Echonest::DynamicPlaylist::MinDuration, Echonest::DynamicPlaylist::MaxDuration, tr( "0 secs" ), tr( "3600 secs" ), 3600 );
} else if( selectedType() == "Loudness" ) {
m_currentType = Echonest::DynamicPlaylist::MinLoudness;
setupMinMaxWidgets( Echonest::DynamicPlaylist::MinLoudness, Echonest::DynamicPlaylist::MaxLoudness, tr( "-100 dB" ), tr( "100 dB" ), 100 );
qobject_cast< LabeledSlider* >( m_input )->slider()->setMinimum( -100 );
} else if( selectedType() == "Danceability" ) {
m_currentType = Echonest::DynamicPlaylist::MinDanceability;
setupMinMaxWidgets( Echonest::DynamicPlaylist::MinDanceability, Echonest::DynamicPlaylist::MaxDanceability, QString(), QString(), 10000 );
} else { } else {
m_match = QWeakPointer<QWidget>( new QWidget ); m_match = QWeakPointer<QWidget>( new QWidget );
m_input = QWeakPointer<QWidget>( new QWidget ); m_input = QWeakPointer<QWidget>( new QWidget );
@@ -181,7 +194,6 @@ Tomahawk::EchonestControl::setupMinMaxWidgets( Echonest::DynamicPlaylist::Playli
input->slider()->setRange( 0, maxRange ); input->slider()->setRange( 0, maxRange );
input->slider()->setTickInterval( 1 ); input->slider()->setTickInterval( 1 );
input->slider()->setTracking( false ); input->slider()->setTracking( false );
input->slider()->setTickPosition( QSlider::TicksBelow );
m_matchString = match->currentText(); m_matchString = match->currentText();
m_matchData = match->itemData( match->currentIndex() ).toString(); m_matchData = match->itemData( match->currentIndex() ).toString();
@@ -222,13 +234,15 @@ Tomahawk::EchonestControl::updateData()
m_data.first = m_currentType; m_data.first = m_currentType;
m_data.second = (qreal)s->slider()->value() / 10000.0; m_data.second = (qreal)s->slider()->value() / 10000.0;
} }
} else if( selectedType() == "Tempo" ) { } else if( selectedType() == "Tempo" || selectedType() == "Duration" || selectedType() == "Loudness" ) {
updateFromComboAndSlider(); updateFromComboAndSlider();
} else if( selectedType() == "Danceability" ) {
updateFromComboAndSlider( true );
} }
} }
void void
Tomahawk::EchonestControl::updateFromComboAndSlider() Tomahawk::EchonestControl::updateFromComboAndSlider( bool smooth )
{ {
QComboBox* combo = qobject_cast<QComboBox*>( m_match.data() ); QComboBox* combo = qobject_cast<QComboBox*>( m_match.data() );
if( combo ) { if( combo ) {
@@ -238,7 +252,7 @@ Tomahawk::EchonestControl::updateFromComboAndSlider()
LabeledSlider* ls = qobject_cast<LabeledSlider*>( m_input.data() ); LabeledSlider* ls = qobject_cast<LabeledSlider*>( m_input.data() );
if( ls && ls->slider() ) { if( ls && ls->slider() ) {
m_data.first = static_cast< Echonest::DynamicPlaylist::PlaylistParam >( combo->itemData( combo->currentIndex() ).toInt() ); m_data.first = static_cast< Echonest::DynamicPlaylist::PlaylistParam >( combo->itemData( combo->currentIndex() ).toInt() );
m_data.second = ls->slider()->value(); m_data.second = ls->slider()->value() / ( smooth ? 10000. : 1.0 );
} }
} }
@@ -258,20 +272,22 @@ Tomahawk::EchonestControl::updateWidgetsFromData()
LabeledSlider* s = qobject_cast<LabeledSlider*>( m_input.data() ); LabeledSlider* s = qobject_cast<LabeledSlider*>( m_input.data() );
if( s ) if( s )
s->slider()->setValue( m_data.second.toDouble() * 10000 ); s->slider()->setValue( m_data.second.toDouble() * 10000 );
} else if( selectedType() == "Tempo" ) { } else if( selectedType() == "Tempo" || selectedType() == "Duration" || selectedType() == "Loudness" ) {
updateToComboAndSlider(); updateToComboAndSlider();
} else if( selectedType() == "Danceability" ) {
updateToComboAndSlider( true );
} }
} }
void void
Tomahawk::EchonestControl::updateToComboAndSlider() Tomahawk::EchonestControl::updateToComboAndSlider( bool smooth )
{ {
QComboBox* combo = qobject_cast<QComboBox*>( m_match.data() ); QComboBox* combo = qobject_cast<QComboBox*>( m_match.data() );
if( combo ) if( combo )
combo->setCurrentIndex( combo->findData( m_matchData ) ); combo->setCurrentIndex( combo->findData( m_matchData ) );
LabeledSlider* ls = qobject_cast<LabeledSlider*>( m_input.data() ); LabeledSlider* ls = qobject_cast<LabeledSlider*>( m_input.data() );
if( ls ) if( ls )
ls->slider()->setValue( m_data.second.toDouble() ); ls->slider()->setValue( m_data.second.toDouble() * ( smooth ? 10000. : 1 ) );
} }

View File

@@ -58,8 +58,8 @@ private:
// utility // utility
void setupMinMaxWidgets( Echonest::DynamicPlaylist::PlaylistParam min, Echonest::DynamicPlaylist::PlaylistParam max, const QString& leftL, const QString& rightL, int maxRange ); void setupMinMaxWidgets( Echonest::DynamicPlaylist::PlaylistParam min, Echonest::DynamicPlaylist::PlaylistParam max, const QString& leftL, const QString& rightL, int maxRange );
void updateFromComboAndSlider(); void updateFromComboAndSlider( bool smooth = false );
void updateToComboAndSlider(); void updateToComboAndSlider( bool smooth = false );
Echonest::DynamicPlaylist::PlaylistParam m_currentType; Echonest::DynamicPlaylist::PlaylistParam m_currentType;
int m_overrideType; int m_overrideType;

View File

@@ -26,6 +26,7 @@ LabeledSlider::LabeledSlider( const QString& leftT, const QString& rightT, QWidg
: QWidget( parent ) : QWidget( parent )
{ {
setLayout( new QHBoxLayout ); setLayout( new QHBoxLayout );
layout()->setMargin( 0 );
m_leftLabel = new QLabel( leftT, this ); m_leftLabel = new QLabel( leftT, this );
layout()->addWidget( m_leftLabel ); layout()->addWidget( m_leftLabel );