-
Notifications
You must be signed in to change notification settings - Fork 55
Expand file tree
/
Copy pathmsharedattributeextensionmanager.cpp
More file actions
112 lines (87 loc) · 3.53 KB
/
msharedattributeextensionmanager.cpp
File metadata and controls
112 lines (87 loc) · 3.53 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
/* * This file is part of Maliit framework *
*
* Copyright (C) 2012 Mattia Barbon <mattia@develer.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License version 2.1 as published by the Free Software Foundation
* and appearing in the file LICENSE.LGPL included in the packaging
* of this file.
*/
#include "msharedattributeextensionmanager.h"
#include "mimsettings.h"
struct MSharedAttributeExtensionManagerPluginSetting
{
MSharedAttributeExtensionManagerPluginSetting(const QString &key, Maliit::SettingEntryType type, QVariantMap attributes) :
setting(key),
type(type),
attributes(attributes)
{
}
MImSettings setting;
Maliit::SettingEntryType type;
QVariantMap attributes;
};
MSharedAttributeExtensionManager::MSharedAttributeExtensionManager()
{
}
MSharedAttributeExtensionManager::~MSharedAttributeExtensionManager()
{
}
void MSharedAttributeExtensionManager::registerPluginSetting(const QString &fullName, Maliit::SettingEntryType type,
QVariantMap attributes)
{
QString key = fullName.section(1, -1);
QSharedPointer<MSharedAttributeExtensionManagerPluginSetting> value(new MSharedAttributeExtensionManagerPluginSetting(key, type, attributes));
sharedAttributeExtensions[key] = value;
connect(&value.data()->setting, SIGNAL(valueChanged()), this, SLOT(attributeValueChanged()));
}
void MSharedAttributeExtensionManager::handleClientDisconnect(unsigned int clientId)
{
clientIds.removeOne(clientId);
}
void MSharedAttributeExtensionManager::handleAttributeExtensionRegistered(unsigned int clientId, int id,
const QString &attributeExtension)
{
Q_UNUSED(attributeExtension);
if (id != PluginSettings)
return;
if (clientIds.contains(clientId))
return;
clientIds.append(clientId);
}
void MSharedAttributeExtensionManager::handleAttributeExtensionUnregistered(unsigned int clientId, int id)
{
if (id != PluginSettings)
return;
clientIds.removeOne(clientId);
}
void MSharedAttributeExtensionManager::handleExtendedAttributeUpdate(unsigned int clientId, int id,
const QString &target, const QString &targetName,
const QString &attribute, const QVariant &value)
{
Q_UNUSED(clientId);
if (id != PluginSettings)
return;
QString key = QString::fromLatin1("%1/%2/%3").arg(target, targetName, attribute);
SharedAttributeExtensionContainer::iterator it = sharedAttributeExtensions.find(key);
if (it == sharedAttributeExtensions.end())
return;
// TODO error notification
if (!validateSettingValue(it->data()->type, it->data()->attributes, value))
return;
it->data()->setting.set(value);
}
void MSharedAttributeExtensionManager::attributeValueChanged()
{
MImSettings *value = qobject_cast<MImSettings *>(sender());
if (!value)
return;
if (sharedAttributeExtensions.find(value->key()) == sharedAttributeExtensions.end())
return;
const QString fullName = value->key();
const QString &target = QString::fromLatin1("/") + fullName.section('/', 1, 1);
const QString &targetItem = fullName.section('/', 2, -2);
const QString &attribute = fullName.section('/', -1, -1);
Q_EMIT notifyExtensionAttributeChanged(clientIds, PluginSettings, target, targetItem, attribute, value->value());
}