1
/* * This file is part of Maliit framework *
3
* Copyright (C) 2012 Mattia Barbon <mattia@develer.com>
5
* This library is free software; you can redistribute it and/or
6
* modify it under the terms of the GNU Lesser General Public
7
* License version 2.1 as published by the Free Software Foundation
8
* and appearing in the file LICENSE.LGPL included in the packaging
12
#include "settingsmanager.h"
14
#include <maliit/settingdata.h>
15
#include <maliit/attributeextension.h>
16
#include "mimserverconnection.h"
17
#include "connectionfactory.h"
18
#include "pluginsettings.h"
23
struct SettingsManagerPrivate
25
QSharedPointer<AttributeExtension> settings_list_changed;
26
QSharedPointer<MImServerConnection> connection;
30
QString SettingsManager::preferred_description_locale = "en";
32
void SettingsManager::setPreferredDescriptionLocale(const QString &localeName)
34
preferred_description_locale = localeName;
37
QString SettingsManager::preferredDescriptionLocale()
39
return preferred_description_locale;
42
SettingsManager *SettingsManager::create(QObject *parent)
44
return new SettingsManager(createServerConnection(qgetenv("QT_IM_MODULE")), parent);
47
SettingsManager::SettingsManager(QSharedPointer<MImServerConnection> connection,
50
d_ptr(new SettingsManagerPrivate)
54
d->connection = connection;
57
connect(d->connection.data(), SIGNAL(pluginSettingsReceived(QList<MImPluginSettingsInfo>)),
58
this, SLOT(onPluginSettingsReceived(QList<MImPluginSettingsInfo>)));
59
connect(d->connection.data(), SIGNAL(connected()), this, SIGNAL(connected()));
60
connect(d->connection.data(), SIGNAL(disconnected()), this, SIGNAL(disconnected()));
62
qCritical() << __PRETTY_FUNCTION__ << "No connection established";
66
SettingsManager::~SettingsManager()
70
void SettingsManager::loadPluginSettings() const
72
Q_D(const SettingsManager);
75
d->connection->loadPluginSettings(preferredDescriptionLocale());
77
qCritical() << "Could not load plugin settings - no connection to server";
81
void SettingsManager::onPluginSettingsReceived(const QList<MImPluginSettingsInfo> &settings)
85
QList<QSharedPointer<PluginSettings> > result;
86
QHash<int, QSharedPointer<AttributeExtension> > extensions;
88
Q_FOREACH (const MImPluginSettingsInfo &plugin_info, settings)
90
QSharedPointer<AttributeExtension> extension;
92
// special case for the attribute extension used to monitor changes in the settings list
93
if (plugin_info.plugin_name == "@settings") {
94
d->settings_list_changed = QSharedPointer<AttributeExtension>(AttributeExtension::create(plugin_info.extension_id));
96
connect(d->settings_list_changed.data(), SIGNAL(extendedAttributeChanged(QString,QVariant)),
97
this, SLOT(loadPluginSettings()));
102
if (extensions.contains(plugin_info.extension_id))
103
extension = extensions[plugin_info.extension_id];
105
extension = extensions[plugin_info.extension_id] =
106
AttributeExtension::create(plugin_info.extension_id);
108
result.append(QSharedPointer<PluginSettings>(new PluginSettings(plugin_info, extension)));
111
Q_EMIT pluginSettingsReceived(result);