mirror of
https://github.com/tomahawk-player/tomahawk.git
synced 2025-08-14 10:05:32 +02:00
add support for tempo
This commit is contained in:
@@ -160,12 +160,44 @@ Tomahawk::EchonestControl::updateWidgets()
|
|||||||
input->hide();
|
input->hide();
|
||||||
m_match = QWeakPointer< QWidget >( match );
|
m_match = QWeakPointer< QWidget >( match );
|
||||||
m_input = QWeakPointer< QWidget >( input );
|
m_input = QWeakPointer< QWidget >( input );
|
||||||
|
} else if( selectedType() == "Tempo" ) {
|
||||||
|
m_currentType = Echonest::DynamicPlaylist::MinTempo;
|
||||||
|
|
||||||
|
setupMinMaxWidgets( Echonest::DynamicPlaylist::MinTempo, Echonest::DynamicPlaylist::MaxTempo, tr( "0 BPM" ), tr( "500 BPM" ), 500 );
|
||||||
} 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 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Tomahawk::EchonestControl::setupMinMaxWidgets( Echonest::DynamicPlaylist::PlaylistParam min, Echonest::DynamicPlaylist::PlaylistParam max, const QString& leftL, const QString& rightL, int maxRange )
|
||||||
|
{
|
||||||
|
QComboBox* match = new QComboBox;
|
||||||
|
match->addItem( "At Least", min );
|
||||||
|
match->addItem( "At Most", max );
|
||||||
|
|
||||||
|
LabeledSlider* input = new LabeledSlider( leftL, rightL );
|
||||||
|
input->slider()->setRange( 0, maxRange );
|
||||||
|
input->slider()->setTickInterval( 1 );
|
||||||
|
input->slider()->setTracking( false );
|
||||||
|
input->slider()->setTickPosition( QSlider::TicksBelow );
|
||||||
|
|
||||||
|
m_matchString = match->currentText();
|
||||||
|
m_matchData = match->itemData( match->currentIndex() ).toString();
|
||||||
|
|
||||||
|
|
||||||
|
connect( input->slider(), SIGNAL( valueChanged( int ) ), this, SLOT( updateData() ) );
|
||||||
|
connect( input->slider(), SIGNAL( sliderMoved( int ) ), this, SLOT( editingFinished() ) );
|
||||||
|
connect( input->slider(), SIGNAL( sliderMoved( int ) ), &m_editingTimer, SLOT( stop() ) );
|
||||||
|
|
||||||
|
match->hide();
|
||||||
|
input->hide();
|
||||||
|
m_match = QWeakPointer< QWidget >( match );
|
||||||
|
m_input = QWeakPointer< QWidget >( input );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
Tomahawk::EchonestControl::updateData()
|
Tomahawk::EchonestControl::updateData()
|
||||||
{
|
{
|
||||||
@@ -190,9 +222,27 @@ 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" ) {
|
||||||
|
updateFromComboAndSlider();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Tomahawk::EchonestControl::updateFromComboAndSlider()
|
||||||
|
{
|
||||||
|
QComboBox* combo = qobject_cast<QComboBox*>( m_match.data() );
|
||||||
|
if( combo ) {
|
||||||
|
m_matchString = combo->currentText();
|
||||||
|
m_matchData = combo->itemData( combo->currentIndex() ).toString();
|
||||||
|
}
|
||||||
|
LabeledSlider* ls = qobject_cast<LabeledSlider*>( m_input.data() );
|
||||||
|
if( ls && ls->slider() ) {
|
||||||
|
m_data.first = static_cast< Echonest::DynamicPlaylist::PlaylistParam >( combo->itemData( combo->currentIndex() ).toInt() );
|
||||||
|
m_data.second = ls->slider()->value();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// fills in the current widget with the data from json or dbcmd (m_data.second and m_matchData)
|
// fills in the current widget with the data from json or dbcmd (m_data.second and m_matchData)
|
||||||
void
|
void
|
||||||
Tomahawk::EchonestControl::updateWidgetsFromData()
|
Tomahawk::EchonestControl::updateWidgetsFromData()
|
||||||
@@ -208,9 +258,23 @@ 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" ) {
|
||||||
|
updateToComboAndSlider();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
Tomahawk::EchonestControl::updateToComboAndSlider()
|
||||||
|
{
|
||||||
|
QComboBox* combo = qobject_cast<QComboBox*>( m_match.data() );
|
||||||
|
if( combo )
|
||||||
|
combo->setCurrentIndex( combo->findData( m_matchData ) );
|
||||||
|
LabeledSlider* ls = qobject_cast<LabeledSlider*>( m_input.data() );
|
||||||
|
if( ls )
|
||||||
|
ls->slider()->setValue( m_data.second.toDouble() );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
Tomahawk::EchonestControl::editingFinished()
|
Tomahawk::EchonestControl::editingFinished()
|
||||||
{
|
{
|
||||||
|
@@ -56,6 +56,11 @@ private:
|
|||||||
void updateWidgets();
|
void updateWidgets();
|
||||||
void updateWidgetsFromData();
|
void updateWidgetsFromData();
|
||||||
|
|
||||||
|
// utility
|
||||||
|
void setupMinMaxWidgets( Echonest::DynamicPlaylist::PlaylistParam min, Echonest::DynamicPlaylist::PlaylistParam max, const QString& leftL, const QString& rightL, int maxRange );
|
||||||
|
void updateFromComboAndSlider();
|
||||||
|
void updateToComboAndSlider();
|
||||||
|
|
||||||
Echonest::DynamicPlaylist::PlaylistParam m_currentType;
|
Echonest::DynamicPlaylist::PlaylistParam m_currentType;
|
||||||
int m_overrideType;
|
int m_overrideType;
|
||||||
|
|
||||||
|
@@ -39,7 +39,7 @@ EchonestFactory::createControl( const QString& controlType )
|
|||||||
QStringList
|
QStringList
|
||||||
EchonestFactory::typeSelectors() const
|
EchonestFactory::typeSelectors() const
|
||||||
{
|
{
|
||||||
return QStringList() << "Artist" << "Variety" << "Description" << "Tempo" << "Duration" << "Loudness"
|
return QStringList() << "Artist" << "Variety" << "Tempo" << "Duration" << "Loudness"
|
||||||
<< "Danceability" << "Energy" << "Artist Familiarity" << "Artist Hotttnesss" << "Song Familiarity"
|
<< "Danceability" << "Energy" << "Artist Familiarity" << "Artist Hotttnesss" << "Song Familiarity"
|
||||||
<< "Longitude" << "Latitude" << "Mode" << "Key" << "Sorting";
|
<< "Longitude" << "Latitude" << "Mode" << "Key" << "Sorting";
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user