From b68d8a35296bae6b4110ac7cedf35041e9429ddd Mon Sep 17 00:00:00 2001 From: Leo Franchi Date: Sun, 16 Jan 2011 14:10:03 -0500 Subject: [PATCH] don't change type and delete widgets unless we have to fixes improper loading of input --- src/dynamic/widgets/DynamicControlWidget.cpp | 2 +- src/libtomahawk/dynamic/DynamicControl.h | 3 ++ .../dynamic/echonest/EchonestControl.cpp | 33 ++++++++++++------- .../dynamic/echonest/EchonestControl.h | 2 ++ 4 files changed, 27 insertions(+), 13 deletions(-) diff --git a/src/dynamic/widgets/DynamicControlWidget.cpp b/src/dynamic/widgets/DynamicControlWidget.cpp index 9077bfd83..a8c8916e1 100644 --- a/src/dynamic/widgets/DynamicControlWidget.cpp +++ b/src/dynamic/widgets/DynamicControlWidget.cpp @@ -166,7 +166,7 @@ DynamicControlWidget::typeSelectorChanged( const QString& type, bool firstLoad ) m_typeSelector->setLabel( type ); if( m_control->matchSelector() ) { m_matchSelector->setWritableWidget( m_control->matchSelector() ); - m_matchSelector->setLabel( m_control->match() ); + m_matchSelector->setLabel( m_control->matchString() ); m_matchSelector->setWritable( m_isLocal ); m_layout->insertWidget( 1, m_matchSelector, 0 ); } diff --git a/src/libtomahawk/dynamic/DynamicControl.h b/src/libtomahawk/dynamic/DynamicControl.h index 842c6c501..3ffe8a454 100644 --- a/src/libtomahawk/dynamic/DynamicControl.h +++ b/src/libtomahawk/dynamic/DynamicControl.h @@ -65,6 +65,9 @@ public: */ virtual QWidget* inputField() { Q_ASSERT( false ); return 0; } + /// The user-readable match value, for showing in read-only playlists + virtual QString matchString() { Q_ASSERT( false ); return QString(); } + /// the serializable value of the match virtual QString match() const { Q_ASSERT( false ); return QString(); } /// the serializable value of the input diff --git a/src/libtomahawk/dynamic/echonest/EchonestControl.cpp b/src/libtomahawk/dynamic/echonest/EchonestControl.cpp index ea0ee2837..6edd7ce77 100644 --- a/src/libtomahawk/dynamic/echonest/EchonestControl.cpp +++ b/src/libtomahawk/dynamic/echonest/EchonestControl.cpp @@ -44,13 +44,15 @@ Tomahawk::EchonestControl::matchSelector() void Tomahawk::EchonestControl::setSelectedType ( const QString& type ) { - if( !m_input.isNull() ) - delete m_input.data(); - if( !m_match.isNull() ) - delete m_match.data(); - - Tomahawk::DynamicControl::setSelectedType ( type ); - updateWidgets(); + if( type != selectedType() ) { + if( !m_input.isNull() ) + delete m_input.data(); + if( !m_match.isNull() ) + delete m_match.data(); + + Tomahawk::DynamicControl::setSelectedType ( type ); + updateWidgets(); + } } Echonest::DynamicPlaylist::PlaylistParamData @@ -65,10 +67,16 @@ QString Tomahawk::EchonestControl::input() const } QString Tomahawk::EchonestControl::match() const +{ + return m_matchData; +} + +QString Tomahawk::EchonestControl::matchString() { return m_matchString; } + void Tomahawk::EchonestControl::setInput(const QString& input) { // TODO generate widgets @@ -79,7 +87,7 @@ void Tomahawk::EchonestControl::setInput(const QString& input) void Tomahawk::EchonestControl::setMatch(const QString& match) { // TODO generate widgets - m_matchString = match; + m_matchData = match; updateWidgetsFromData(); } @@ -101,7 +109,7 @@ Tomahawk::EchonestControl::updateWidgets() match->addItem( "Limit To", Echonest::DynamicPlaylist::ArtistType ); match->addItem( "Similar To", Echonest::DynamicPlaylist::ArtistRadioType ); - m_matchString = match->itemText( 0 ); + m_matchString = match->currentText(); input->setPlaceholderText( "Artist name" ); input->setSizePolicy( QSizePolicy::Ignored, QSizePolicy::Fixed ); @@ -127,7 +135,8 @@ Tomahawk::EchonestControl::updateData() if( selectedType() == "Artist" ) { QComboBox* combo = qobject_cast( m_match.data() ); if( combo ) { - m_matchString = combo->itemData( combo->currentIndex() ).toString(); + m_matchString = combo->currentText(); + m_matchData = combo->itemData( combo->currentIndex() ).toString(); } QLineEdit* edit = qobject_cast( m_input.data() ); if( edit && !edit->text().isEmpty() ) { @@ -137,13 +146,13 @@ Tomahawk::EchonestControl::updateData() } } -// fills in the current widget with the data from json or dbcmd (m_data.second and m_matchString) +// fills in the current widget with the data from json or dbcmd (m_data.second and m_matchData) void Tomahawk::EchonestControl::updateWidgetsFromData() { if( selectedType() == "Artist" ) { QComboBox* combo = qobject_cast( m_match.data() ); if( combo ) - combo->setCurrentIndex( combo->findData( m_matchString ) ); + combo->setCurrentIndex( combo->findData( m_matchData ) ); QLineEdit* edit = qobject_cast( m_input.data() ); if( edit ) edit->setText( m_data.second.toString() ); diff --git a/src/libtomahawk/dynamic/echonest/EchonestControl.h b/src/libtomahawk/dynamic/echonest/EchonestControl.h index 1e4e1196a..670fe3c65 100644 --- a/src/libtomahawk/dynamic/echonest/EchonestControl.h +++ b/src/libtomahawk/dynamic/echonest/EchonestControl.h @@ -36,6 +36,7 @@ public: virtual QString input() const; virtual QString match() const; + virtual QString matchString(); virtual void setInput(const QString& input); virtual void setMatch(const QString& match); @@ -57,6 +58,7 @@ private: QWeakPointer< QWidget > m_input; QWeakPointer< QWidget > m_match; + QString m_matchData; QString m_matchString; Echonest::DynamicPlaylist::PlaylistParamData m_data;