diff --git a/src/libtomahawk/accounts/AccountConfigWidget.cpp b/src/libtomahawk/accounts/AccountConfigWidget.cpp index 04b6d18e0..cf0b2b76c 100644 --- a/src/libtomahawk/accounts/AccountConfigWidget.cpp +++ b/src/libtomahawk/accounts/AccountConfigWidget.cpp @@ -18,6 +18,12 @@ #include "AccountConfigWidget.h" + +#include "../utils/Logger.h" + +#include + + AccountConfigWidget::AccountConfigWidget( QWidget* parent ) : QWidget( parent ) { @@ -49,3 +55,85 @@ AccountConfigWidget::settingsValid() const { return m_errors.empty(); } + + +void +AccountConfigWidget::setDataWidgets( const QVariantList& dataWidgets ) +{ + m_dataWidgets = dataWidgets; +} + + +const QVariantMap +AccountConfigWidget::readData() +{ + + QVariantMap saveData; + foreach( const QVariant& dataWidget, m_dataWidgets ) + { + QVariantMap data = dataWidget.toMap(); + + QString widgetName = data["widget"].toString(); + QWidget* widget= findChild( widgetName ); + + QVariant value = widgetData( widget, data["property"].toString() ); + + saveData[ data["name"].toString() ] = value; + } + + return saveData; +} + + +QVariant +AccountConfigWidget::widgetData( QWidget* widget, const QString& property ) +{ + for ( int i = 0; i < widget->metaObject()->propertyCount(); i++ ) + { + if ( widget->metaObject()->property( i ).name() == property ) + { + return widget->property( property.toLatin1() ); + } + } + + return QVariant(); +} + + +void +AccountConfigWidget::fillDataInWidgets( const QVariantMap& data ) +{ + foreach(const QVariant& dataWidget, m_dataWidgets) + { + const QVariantMap m = dataWidget.toMap(); + QString widgetName = m["widget"].toString(); + QWidget* widget= findChild( widgetName ); + if ( !widget ) + { + tLog() << Q_FUNC_INFO << "Widget specified in resolver was not found:" << widgetName; + Q_ASSERT(false); + return; + } + + QString propertyName = m["property"].toString(); + QString name = m["name"].toString(); + + setWidgetData( data[ name ], widget, propertyName ); + } +} + + +void +AccountConfigWidget::setWidgetData( const QVariant& value, QWidget* widget, const QString& property ) +{ + const QMetaObject *metaObject = widget->metaObject(); + for ( int i = 0; i < metaObject->propertyCount(); i++ ) + { + const QMetaProperty &prop = metaObject->property( i ); + if ( prop.name() == property ) + { + prop.write( widget, value ); + return; + } + } +} diff --git a/src/libtomahawk/accounts/AccountConfigWidget.h b/src/libtomahawk/accounts/AccountConfigWidget.h index 8b157a4e2..89290ccb4 100644 --- a/src/libtomahawk/accounts/AccountConfigWidget.h +++ b/src/libtomahawk/accounts/AccountConfigWidget.h @@ -19,9 +19,10 @@ #ifndef ACCOUNTCONFIGWIDGET_H #define ACCOUNTCONFIGWIDGET_H -#include "DllMacro.h" - #include +#include + +#include "DllMacro.h" class DLLEXPORT AccountConfigWidget : public QWidget { @@ -35,8 +36,16 @@ public: virtual bool settingsValid() const; + void setDataWidgets( const QVariantList& dataWidgets ); + const QVariantMap readData(); + static QVariant widgetData( QWidget* widget, const QString& property ); + static void setWidgetData( const QVariant& value, QWidget* widget, const QString& property ); + void fillDataInWidgets( const QVariantMap& data ); + + protected: QStringList m_errors; + QVariantList m_dataWidgets; }; #endif // ACCOUNTCONFIGWIDGET_H diff --git a/src/libtomahawk/resolvers/JSResolver.cpp b/src/libtomahawk/resolvers/JSResolver.cpp index 2c37b1893..81591ab4c 100644 --- a/src/libtomahawk/resolvers/JSResolver.cpp +++ b/src/libtomahawk/resolvers/JSResolver.cpp @@ -290,8 +290,10 @@ JSResolver::init() // load config widget and apply settings loadUi(); - QVariantMap config = resolverUserConfig(); - fillDataInWidgets( config ); + if ( !d->configWidget.isNull() ) + { + d->configWidget->fillDataInWidgets( resolverUserConfig() ); + } qDebug() << "JS" << filePath() << "READY," << "name" << d->name << "weight" << d->weight << "timeout" << d->timeout << "icon received" << success; @@ -687,7 +689,6 @@ JSResolver::loadUi() Q_D( JSResolver ); QVariantMap m = callOnResolver( "getConfigUi()" ).toMap(); - d->dataWidgets = m["fields"].toList(); bool compressed = m.value( "compressed", "false" ).toBool(); qDebug() << "Resolver has a preferences widget! compressed?" << compressed; @@ -709,6 +710,10 @@ JSResolver::loadUi() uiData = fixDataImagePaths( uiData, compressed, images ); d->configWidget = QPointer< AccountConfigWidget >( widgetFromData( uiData, 0 ) ); + if ( !d->configWidget.isNull() ) + { + d->configWidget->setDataWidgets( m["fields"].toList() ); + } emit changed(); } @@ -739,81 +744,12 @@ JSResolver::saveConfig() } -QVariant -JSResolver::widgetData( QWidget* widget, const QString& property ) -{ - for ( int i = 0; i < widget->metaObject()->propertyCount(); i++ ) - { - if ( widget->metaObject()->property( i ).name() == property ) - { - return widget->property( property.toLatin1() ); - } - } - - return QVariant(); -} - - -void -JSResolver::setWidgetData( const QVariant& value, QWidget* widget, const QString& property ) -{ - const QMetaObject *metaObject = widget->metaObject(); - for ( int i = 0; i < metaObject->propertyCount(); i++ ) - { - const QMetaProperty &prop = metaObject->property( i ); - if ( prop.name() == property ) - { - prop.write( widget, value ); - return; - } - } -} - - QVariantMap JSResolver::loadDataFromWidgets() { Q_D( JSResolver ); - QVariantMap saveData; - foreach( const QVariant& dataWidget, d->dataWidgets ) - { - QVariantMap data = dataWidget.toMap(); - - QString widgetName = data["widget"].toString(); - QWidget* widget= d->configWidget.data()->findChild( widgetName ); - - QVariant value = widgetData( widget, data["property"].toString() ); - - saveData[ data["name"].toString() ] = value; - } - - return saveData; -} - - -void -JSResolver::fillDataInWidgets( const QVariantMap& data ) -{ - Q_D( JSResolver ); - - foreach(const QVariant& dataWidget, d->dataWidgets) - { - const QVariantMap m = dataWidget.toMap(); - QString widgetName = m["widget"].toString(); - QWidget* widget= d->configWidget.data()->findChild( widgetName ); - if ( !widget ) - { - tLog() << Q_FUNC_INFO << "Widget specified in resolver was not found:" << widgetName; - Q_ASSERT(false); - return; - } - - QString propertyName = m["property"].toString(); - QString name = m["name"].toString(); - - setWidgetData( data[ name ], widget, propertyName ); - } + return d->configWidget->readData(); } diff --git a/src/libtomahawk/resolvers/JSResolver.h b/src/libtomahawk/resolvers/JSResolver.h index 856d14215..0a3cae805 100644 --- a/src/libtomahawk/resolvers/JSResolver.h +++ b/src/libtomahawk/resolvers/JSResolver.h @@ -98,9 +98,6 @@ private: void init(); void loadUi(); - void setWidgetData( const QVariant& value, QWidget* widget, const QString& property ); - QVariant widgetData( QWidget* widget, const QString& property ); - void fillDataInWidgets( const QVariantMap& data ); void onCapabilitiesChanged( Capabilities capabilities ); void loadCollections();