22 #ifndef PHONON_GLOBALDESCRIPTIONCONTAINER_H
23 #define PHONON_GLOBALDESCRIPTIONCONTAINER_H
25 #include <QtCore/QMap>
26 #include <QtCore/QDebug>
27 #include <QtCore/QtGlobal>
29 #include <phonon/objectdescription.h>
34 class MediaController;
63 typedef int global_id_t;
64 typedef int local_id_t;
66 typedef QMap<global_id_t, D> GlobalDescriptorMap;
67 typedef QMapIterator<global_id_t, D> GlobalDescriptorMapIterator;
69 typedef QMap<global_id_t, local_id_t> LocalIdMap;
70 typedef QMapIterator<global_id_t, local_id_t> LocaIdMapIterator;
90 GlobalDescriptorMapIterator it(m_globalDescriptors);
91 while (it.hasNext()) {
105 return m_globalDescriptors.value(key, D());
119 Q_ASSERT(m_localIds.find(obj) == m_localIds.end());
120 m_localIds[obj] = LocalIdMap();
134 Q_ASSERT(m_localIds.find(obj) != m_localIds.end());
135 m_localIds[obj].clear();
136 m_localIds.remove(obj);
147 Q_ASSERT_X(m_localIds.find(obj) != m_localIds.end(),
149 "the object is not registered!");
150 m_localIds[obj].clear();
167 local_id_t index,
const QString &name,
const QString &type = QString())
170 Q_ASSERT(m_localIds.find(obj) != m_localIds.end());
172 QHash<QByteArray, QVariant> properties;
173 properties.insert(
"name", name);
174 properties.insert(
"description",
"");
175 properties.insert(
"type", type);
182 GlobalDescriptorMapIterator it(m_globalDescriptors);
183 while (it.hasNext()) {
185 if (it.value().property(
"name") == name &&
186 it.value().property(
"type") == type) {
187 id = it.value().index();
193 D descriptor = D(
id, properties);
195 m_globalDescriptors.insert(
id, descriptor);
196 m_localIds[obj].insert(
id, index);
211 Q_ASSERT(m_localIds.find(obj) != m_localIds.end());
212 Q_ASSERT(m_globalDescriptors.find(descriptor.index()) == m_globalDescriptors.end());
214 m_globalDescriptors.insert(descriptor.index(), descriptor);
215 m_localIds[obj].insert(descriptor.index(), descriptor.index());
232 Q_ASSERT(m_localIds.find(obj) != m_localIds.end());
235 LocaIdMapIterator it(m_localIds.value(obj));
236 while (it.hasNext()) {
238 Q_ASSERT(m_globalDescriptors.find(it.key()) != m_globalDescriptors.end());
239 list << m_globalDescriptors[it.key()];
253 Q_ASSERT(m_localIds.find(obj) != m_localIds.end());
254 if (m_localIds[obj].find(key) == m_localIds[obj].end())
255 qWarning() <<
"WARNING:" << Q_FUNC_INFO
256 <<
": supplied global ID is unknown for the object ("
258 return m_localIds[obj].value(key, 0);
275 GlobalDescriptorMap m_globalDescriptors;
276 QMap<const void *, LocalIdMap> m_localIds;
281 template <
typename D>
282 GlobalDescriptionContainer<D> *GlobalDescriptionContainer<D>::self = 0;
284 typedef GlobalDescriptionContainer<AudioChannelDescription> GlobalAudioChannels;
285 typedef GlobalDescriptionContainer<SubtitleDescription> GlobalSubtitles;
289 #endif // PHONON_GLOBALDESCRIPTIONCONTAINER_H