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

Move config data handling into AccountConfigWidget

This commit is contained in:
Dominik Schmidt
2014-12-10 22:22:17 +01:00
parent d5c5eb1e44
commit e2fd7e5681
4 changed files with 108 additions and 78 deletions

View File

@@ -18,6 +18,12 @@
#include "AccountConfigWidget.h"
#include "../utils/Logger.h"
#include <QMetaProperty>
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<QWidget*>( 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<QWidget*>( 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;
}
}
}

View File

@@ -19,9 +19,10 @@
#ifndef ACCOUNTCONFIGWIDGET_H
#define ACCOUNTCONFIGWIDGET_H
#include "DllMacro.h"
#include <QWidget>
#include <QVariantMap>
#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

View File

@@ -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<QWidget*>( 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<QWidget*>( 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();
}

View File

@@ -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();