From 15c02540d61440e4824060b80c17a1758c69dcb6 Mon Sep 17 00:00:00 2001 From: Leo Franchi Date: Wed, 11 May 2011 14:08:42 +0200 Subject: [PATCH] Immediately update delegate with widget config change --- src/libtomahawk/resolver.h | 4 ++++ src/resolvers/scriptresolver.cpp | 2 ++ src/resolversmodel.cpp | 18 ++++++++++++++++++ src/resolversmodel.h | 5 +++++ src/settingsdialog.cpp | 2 +- 5 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/libtomahawk/resolver.h b/src/libtomahawk/resolver.h index c3a3bae7e..2d574898f 100644 --- a/src/libtomahawk/resolver.h +++ b/src/libtomahawk/resolver.h @@ -65,9 +65,13 @@ public: virtual QWidget* configUI() const = 0; virtual void saveConfig() = 0; + public slots: virtual void stop() = 0; +signals: + void changed(); // if config widget was added/removed + protected: QWidget* widgetFromData( QByteArray& data, QWidget* parent = 0 ); QVariant configMsgFromWidget( QWidget* w ); diff --git a/src/resolvers/scriptresolver.cpp b/src/resolvers/scriptresolver.cpp index d119e9e4e..0c57ff2cf 100644 --- a/src/resolvers/scriptresolver.cpp +++ b/src/resolvers/scriptresolver.cpp @@ -257,6 +257,8 @@ ScriptResolver::setupConfWidget( const QVariantMap& m ) if( m.contains( "images" ) ) uiData = fixDataImagePaths( uiData, compressed, m[ "images" ].toMap() ); m_configWidget = QWeakPointer< QWidget >( widgetFromData( uiData, 0 ) ); + + emit changed(); } diff --git a/src/resolversmodel.cpp b/src/resolversmodel.cpp index f3664cef9..0094dad79 100644 --- a/src/resolversmodel.cpp +++ b/src/resolversmodel.cpp @@ -125,6 +125,12 @@ ResolversModel::addResolver( const QString& resolver, bool enable ) m_allResolvers << resolver; if( enable ) m_enabledResolvers << resolver; + if( Tomahawk::ExternalResolver* res = TomahawkApp::instance()->resolverForPath( resolver ) ) { + qDebug() << "Added resolver with config and stuff:" << res->configUI(); + connect( res, SIGNAL( changed() ), this, SLOT( resolverChanged() ) ); + } else + qDebug() << "No resolver object for path yet:" << resolver; + endInsertRows(); } @@ -153,6 +159,18 @@ ResolversModel::enabledResolvers() const return m_enabledResolvers; } +void +ResolversModel::resolverChanged() +{ + Q_ASSERT( qobject_cast< Tomahawk::ExternalResolver* >( sender() ) ); + Tomahawk::ExternalResolver* res = qobject_cast< Tomahawk::ExternalResolver* >( sender() ); + qDebug() << "Got resolverChanged signal, does it have a config UI yet?" << res->configUI(); + if( m_enabledResolvers.contains( res->filePath() ) ) { + QModelIndex idx = index( m_allResolvers.indexOf( res->filePath() ), 0, QModelIndex() ); + emit dataChanged( idx, idx ); + } +} + void ResolversModel::addInstalledResolvers() { diff --git a/src/resolversmodel.h b/src/resolversmodel.h index e7890fabf..d19d0d474 100644 --- a/src/resolversmodel.h +++ b/src/resolversmodel.h @@ -26,6 +26,7 @@ class ResolversModel : public QAbstractListModel { + Q_OBJECT public: enum Roles { ResolverName = Qt::UserRole + 15, @@ -47,6 +48,10 @@ public: QStringList allResolvers() const; QStringList enabledResolvers() const; + +private slots: + void resolverChanged(); + private: void addInstalledResolvers(); diff --git a/src/settingsdialog.cpp b/src/settingsdialog.cpp index 4bed6ae1f..3f5871aff 100644 --- a/src/settingsdialog.cpp +++ b/src/settingsdialog.cpp @@ -440,8 +440,8 @@ SettingsDialog::addScriptResolver() { QString resolver = QFileDialog::getOpenFileName( this, tr( "Load script resolver file" ), qApp->applicationDirPath() ); if( !resolver.isEmpty() ) { - m_resolversModel->addResolver( resolver, true ); TomahawkApp::instance()->enableScriptResolver( resolver ); + m_resolversModel->addResolver( resolver, true ); } }