summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/phonon/phonon/objectdescriptionmodel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/phonon/phonon/objectdescriptionmodel.cpp')
-rw-r--r--src/3rdparty/phonon/phonon/objectdescriptionmodel.cpp392
1 files changed, 392 insertions, 0 deletions
diff --git a/src/3rdparty/phonon/phonon/objectdescriptionmodel.cpp b/src/3rdparty/phonon/phonon/objectdescriptionmodel.cpp
new file mode 100644
index 0000000000..e989d0c5a9
--- /dev/null
+++ b/src/3rdparty/phonon/phonon/objectdescriptionmodel.cpp
@@ -0,0 +1,392 @@
+/* This file is part of the KDE project
+ Copyright (C) 2006-2007 Matthias Kretz <kretz@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) version 3, or any
+ later version accepted by the membership of KDE e.V. (or its
+ successor approved by the membership of KDE e.V.), Trolltech ASA
+ (or its successors, if any) and the KDE Free Qt Foundation, which shall
+ act as a proxy defined in Section 6 of version 3 of the license.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#include "objectdescriptionmodel.h"
+#include "objectdescriptionmodel_p.h"
+#include "phonondefs_p.h"
+#include "platform_p.h"
+#include <QtCore/QList>
+#include "objectdescription.h"
+#include "phononnamespace_p.h"
+#include <QtCore/QMimeData>
+#include <QtCore/QStringList>
+#include <QtGui/QIcon>
+#include "factory_p.h"
+
+QT_BEGIN_NAMESPACE
+
+#ifndef QT_NO_PHONON_OBJECTDESCRIPTIONMODEL
+
+
+static const uint qt_meta_data_Phonon__ObjectDescriptionModel[] = {
+
+ // content:
+ 1, // revision
+ 0, // classname
+ 0, 0, // classinfo
+ 0, 0, // methods
+ 0, 0, // properties
+ 0, 0, // enums/sets
+
+ 0 // eod
+};
+
+static const char qt_meta_stringdata_Phonon__ObjectDescriptionModel_AudioOutputDeviceType[] = { "Phonon::AudioOutputDevice\0" };
+static const char qt_meta_stringdata_Phonon__ObjectDescriptionModel_AudioCaptureDeviceType[] = { "Phonon::AudioCaptureDevice\0" };
+static const char qt_meta_stringdata_Phonon__ObjectDescriptionModel_EffectType[] = { "Phonon::EffectDescription\0" };
+static const char qt_meta_stringdata_Phonon__ObjectDescriptionModel_AudioChannelType[] = { "Phonon::AudioChannelDescription\0" };
+static const char qt_meta_stringdata_Phonon__ObjectDescriptionModel_SubtitleType[] = { "Phonon::SubtitleDescription\0" };
+/*
+static const char qt_meta_stringdata_Phonon__ObjectDescriptionModel_VideoOutputDeviceType[] = { "Phonon::VideoOutputDevice\0" };
+static const char qt_meta_stringdata_Phonon__ObjectDescriptionModel_VideoCaptureDeviceType[] = { "Phonon::VideoCaptureDevice\0" };
+static const char qt_meta_stringdata_Phonon__ObjectDescriptionModel_AudioCodecType[] = { "Phonon::AudioCodecDescription\0" };
+static const char qt_meta_stringdata_Phonon__ObjectDescriptionModel_VideoCodecType[] = { "Phonon::VideoCodecDescription\0" };
+static const char qt_meta_stringdata_Phonon__ObjectDescriptionModel_ContainerFormatType[] = { "Phonon::ContainerFormatDescription\0" };
+static const char qt_meta_stringdata_Phonon__ObjectDescriptionModel_VisualizationType[] = { "Phonon::VisualizationDescription\0" };
+*/
+
+namespace Phonon
+{
+
+#if !defined(Q_CC_MINGW) || __MINGW32_MAJOR_VERSION >= 4
+
+template<> const QMetaObject ObjectDescriptionModel<AudioOutputDeviceType>::staticMetaObject = {
+ { &QAbstractListModel::staticMetaObject, qt_meta_stringdata_Phonon__ObjectDescriptionModel_AudioOutputDeviceType,
+ qt_meta_data_Phonon__ObjectDescriptionModel, 0 }
+};
+template<> const QMetaObject ObjectDescriptionModel<EffectType>::staticMetaObject = {
+ { &QAbstractListModel::staticMetaObject, qt_meta_stringdata_Phonon__ObjectDescriptionModel_EffectType,
+ qt_meta_data_Phonon__ObjectDescriptionModel, 0 }
+};
+template<> const QMetaObject ObjectDescriptionModel<AudioChannelType>::staticMetaObject = {
+ { &QAbstractListModel::staticMetaObject, qt_meta_stringdata_Phonon__ObjectDescriptionModel_AudioChannelType,
+ qt_meta_data_Phonon__ObjectDescriptionModel, 0 }
+};
+template<> const QMetaObject ObjectDescriptionModel<SubtitleType>::staticMetaObject = {
+ { &QAbstractListModel::staticMetaObject, qt_meta_stringdata_Phonon__ObjectDescriptionModel_SubtitleType,
+ qt_meta_data_Phonon__ObjectDescriptionModel, 0 }
+};
+template<> const QMetaObject ObjectDescriptionModel<AudioCaptureDeviceType>::staticMetaObject = {
+ { &QAbstractListModel::staticMetaObject, qt_meta_stringdata_Phonon__ObjectDescriptionModel_AudioCaptureDeviceType,
+ qt_meta_data_Phonon__ObjectDescriptionModel, 0 }
+};
+/*template<> const QMetaObject ObjectDescriptionModel<VideoOutputDeviceType>::staticMetaObject = {
+ { &QAbstractListModel::staticMetaObject, qt_meta_stringdata_Phonon__ObjectDescriptionModel_VideoOutputDeviceType,
+ qt_meta_data_Phonon__ObjectDescriptionModel, 0 }
+};
+template<> const QMetaObject ObjectDescriptionModel<VideoCaptureDeviceType>::staticMetaObject = {
+ { &QAbstractListModel::staticMetaObject, qt_meta_stringdata_Phonon__ObjectDescriptionModel_VideoCaptureDeviceType,
+ qt_meta_data_Phonon__ObjectDescriptionModel, 0 }
+};
+template<> const QMetaObject ObjectDescriptionModel<AudioCodecType>::staticMetaObject = {
+ { &QAbstractListModel::staticMetaObject, qt_meta_stringdata_Phonon__ObjectDescriptionModel_AudioCodecType,
+ qt_meta_data_Phonon__ObjectDescriptionModel, 0 }
+};
+template<> const QMetaObject ObjectDescriptionModel<VideoCodecType>::staticMetaObject = {
+ { &QAbstractListModel::staticMetaObject, qt_meta_stringdata_Phonon__ObjectDescriptionModel_VideoCodecType,
+ qt_meta_data_Phonon__ObjectDescriptionModel, 0 }
+};
+template<> const QMetaObject ObjectDescriptionModel<ContainerFormatType>::staticMetaObject = {
+ { &QAbstractListModel::staticMetaObject, qt_meta_stringdata_Phonon__ObjectDescriptionModel_ContainerFormatType,
+ qt_meta_data_Phonon__ObjectDescriptionModel, 0 }
+};
+template<> const QMetaObject ObjectDescriptionModel<VisualizationType>::staticMetaObject = {
+ { &QAbstractListModel::staticMetaObject, qt_meta_stringdata_Phonon__ObjectDescriptionModel_VisualizationType,
+ qt_meta_data_Phonon__ObjectDescriptionModel, 0 }
+};*/
+
+template<ObjectDescriptionType type>
+const QMetaObject *ObjectDescriptionModel<type>::metaObject() const
+{
+ return &staticMetaObject;
+}
+
+template<ObjectDescriptionType type>
+void *ObjectDescriptionModel<type>::qt_metacast(const char *_clname)
+{
+ if (!_clname) {
+ return 0;
+ }
+ if (!strcmp(_clname, ObjectDescriptionModel<type>::staticMetaObject.className())) {
+ return static_cast<void *>(const_cast<ObjectDescriptionModel<type> *>(this));
+ }
+ return QAbstractListModel::qt_metacast(_clname);
+}
+
+/*
+template<ObjectDescriptionType type>
+int ObjectDescriptionModel<type>::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
+{
+ return QAbstractListModel::qt_metacall(_c, _id, _a);
+}
+*/
+#endif
+
+int ObjectDescriptionModelData::rowCount(const QModelIndex &parent) const
+{
+ if (parent.isValid())
+ return 0;
+
+ return d->data.size();
+}
+
+QVariant ObjectDescriptionModelData::data(const QModelIndex &index, int role) const
+{
+ if (!index.isValid() || index.row() >= d->data.size() || index.column() != 0)
+ return QVariant();
+
+ switch(role)
+ {
+ case Qt::EditRole:
+ case Qt::DisplayRole:
+ return d->data.at(index.row())->name();
+ break;
+ case Qt::ToolTipRole:
+ return d->data.at(index.row())->description();
+ break;
+ case Qt::DecorationRole:
+ {
+ QVariant icon = d->data.at(index.row())->property("icon");
+ if (icon.isValid()) {
+ if (icon.type() == QVariant::String) {
+ return Platform::icon(icon.toString());
+ } else if (icon.type() == QVariant::Icon) {
+ return icon;
+ }
+ }
+ }
+ return QVariant();
+ default:
+ return QVariant();
+}
+}
+
+Qt::ItemFlags ObjectDescriptionModelData::flags(const QModelIndex &index) const
+{
+ if(!index.isValid() || index.row() >= d->data.size() || index.column() != 0) {
+ return Qt::ItemIsDropEnabled;
+ }
+
+ QVariant available = d->data.at(index.row())->property("available");
+ if (available.isValid() && available.type() == QVariant::Bool && !available.toBool()) {
+ return Qt::ItemIsSelectable | Qt::ItemIsDragEnabled;
+ }
+ return Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsDragEnabled;
+}
+
+QList<int> ObjectDescriptionModelData::tupleIndexOrder() const
+{
+ QList<int> ret;
+ for (int i = 0; i < d->data.size(); ++i) {
+ ret.append(d->data.at(i)->index());
+ }
+ return ret;
+}
+
+int ObjectDescriptionModelData::tupleIndexAtPositionIndex(int positionIndex) const
+{
+ return d->data.at(positionIndex)->index();
+}
+
+QMimeData *ObjectDescriptionModelData::mimeData(ObjectDescriptionType type, const QModelIndexList &indexes) const
+{
+ QMimeData *mimeData = new QMimeData;
+ QByteArray encodedData;
+ QDataStream stream(&encodedData, QIODevice::WriteOnly);
+ QModelIndexList::const_iterator end = indexes.constEnd();
+ QModelIndexList::const_iterator index = indexes.constBegin();
+ for(; index!=end; ++index) {
+ if ((*index).isValid()) {
+ stream << d->data.at((*index).row())->index();
+ }
+ }
+ //pDebug() << Q_FUNC_INFO << "setting mimeData to" << mimeTypes(type).first() << "=>" << encodedData.toHex();
+ mimeData->setData(mimeTypes(type).first(), encodedData);
+ return mimeData;
+}
+
+void ObjectDescriptionModelData::moveUp(const QModelIndex &index)
+{
+ if (!index.isValid() || index.row() >= d->data.size() || index.row() < 1 || index.column() != 0)
+ return;
+
+ emit d->model->layoutAboutToBeChanged();
+ QModelIndex above = index.sibling(index.row() - 1, index.column());
+ d->data.swap(index.row(), above.row());
+ QModelIndexList from, to;
+ from << index << above;
+ to << above << index;
+ d->model->changePersistentIndexList(from, to);
+ emit d->model->layoutChanged();
+}
+
+void ObjectDescriptionModelData::moveDown(const QModelIndex &index)
+{
+ if (!index.isValid() || index.row() >= d->data.size() - 1 || index.column() != 0)
+ return;
+
+ emit d->model->layoutAboutToBeChanged();
+ QModelIndex below = index.sibling(index.row() + 1, index.column());
+ d->data.swap(index.row(), below.row());
+ QModelIndexList from, to;
+ from << index << below;
+ to << below << index;
+ d->model->changePersistentIndexList(from, to);
+ emit d->model->layoutChanged();
+}
+
+ObjectDescriptionModelData::ObjectDescriptionModelData(QAbstractListModel *model)
+ : d(new ObjectDescriptionModelDataPrivate(model))
+{
+}
+
+ObjectDescriptionModelData::~ObjectDescriptionModelData()
+{
+ delete d;
+}
+
+void ObjectDescriptionModelData::setModelData(const QList<QExplicitlySharedDataPointer<ObjectDescriptionData> > &newData)
+{
+ d->data = newData;
+ d->model->reset();
+}
+
+QList<QExplicitlySharedDataPointer<ObjectDescriptionData> > ObjectDescriptionModelData::modelData() const
+{
+ return d->data;
+}
+
+QExplicitlySharedDataPointer<ObjectDescriptionData> ObjectDescriptionModelData::modelData(const QModelIndex &index) const
+{
+ if (!index.isValid() || index.row() >= d->data.size() || index.column() != 0) {
+ return QExplicitlySharedDataPointer<ObjectDescriptionData>(new ObjectDescriptionData(0));
+ }
+ return d->data.at(index.row());
+}
+
+Qt::DropActions ObjectDescriptionModelData::supportedDropActions() const
+{
+ //pDebug() << Q_FUNC_INFO;
+ return Qt::MoveAction;
+}
+
+bool ObjectDescriptionModelData::dropMimeData(ObjectDescriptionType type, const QMimeData *data, Qt::DropAction action,
+ int row, int column, const QModelIndex &parent)
+{
+ Q_UNUSED(action);
+ Q_UNUSED(column);
+ Q_UNUSED(parent);
+ //pDebug() << Q_FUNC_INFO << data << action << row << column << parent;
+
+ QString format = mimeTypes(type).first();
+ if (!data->hasFormat(format)) {
+ return false;
+ }
+
+ if (row == -1) {
+ row = d->data.size();
+ }
+
+ QByteArray encodedData = data->data(format);
+ QDataStream stream(&encodedData, QIODevice::ReadOnly);
+ QList<QExplicitlySharedDataPointer<ObjectDescriptionData> > toInsert;
+ while (!stream.atEnd()) {
+ int otherIndex;
+ stream >> otherIndex;
+ ObjectDescriptionData *obj = ObjectDescriptionData::fromIndex(type, otherIndex);
+
+ if (obj->isValid()) {
+ toInsert << QExplicitlySharedDataPointer<ObjectDescriptionData>(obj);
+ } else {
+ delete obj;
+ }
+ }
+ d->model->beginInsertRows(QModelIndex(), row, row + toInsert.size() - 1);
+ foreach (const QExplicitlySharedDataPointer<ObjectDescriptionData> &obj, toInsert) {
+ d->data.insert(row, obj);
+ }
+ d->model->endInsertRows();
+ return true;
+}
+
+
+bool ObjectDescriptionModelData::removeRows(int row, int count, const QModelIndex &parent)
+{
+ //pDebug() << Q_FUNC_INFO << row << count << parent;
+ if (parent.isValid() || row + count > d->data.size()) {
+ return false;
+ }
+ d->model->beginRemoveRows(parent, row, row + count - 1);
+ for (;count > 0; --count) {
+ d->data.removeAt(row);
+ }
+ d->model->endRemoveRows();
+ return true;
+}
+
+/*
+template<ObjectDescriptionType type>
+bool ObjectDescriptionModel<type>::insertRows(int row, int count, const QModelIndex &parent)
+{
+ pDebug() << Q_FUNC_INFO << row << count << parent;
+ if (parent.isValid() || row < 0 || row > d->data.size()) {
+ return false;
+ }
+ beginInsertRows(parent, row, row + count - 1);
+ for (;count > 0; --count) {
+ d->data.insert(row, ObjectDescription<type>());
+ }
+ endInsertRows();
+ return true;
+}
+*/
+
+QStringList ObjectDescriptionModelData::mimeTypes(ObjectDescriptionType type) const
+{
+ return QStringList(QLatin1String("application/x-phonon-objectdescription") + QString::number(static_cast<int>(type)));
+}
+
+#if !defined(Q_CC_MINGW) || __MINGW32_MAJOR_VERSION >= 4
+#if !defined(Q_CC_MSVC) || _MSC_VER > 1300 || defined(Q_CC_INTEL)
+#define INSTANTIATE_META_FUNCTIONS(type) \
+template const QMetaObject *ObjectDescriptionModel<type>::metaObject() const; \
+template void *ObjectDescriptionModel<type>::qt_metacast(const char *)
+
+INSTANTIATE_META_FUNCTIONS(AudioOutputDeviceType);
+INSTANTIATE_META_FUNCTIONS(AudioCaptureDeviceType);
+INSTANTIATE_META_FUNCTIONS(EffectType);
+INSTANTIATE_META_FUNCTIONS(AudioChannelType);
+INSTANTIATE_META_FUNCTIONS(SubtitleType);
+#endif
+/*INSTANTIATE_META_FUNCTIONS(VideoOutputDeviceType);
+INSTANTIATE_META_FUNCTIONS(VideoCaptureDeviceType);
+INSTANTIATE_META_FUNCTIONS(AudioCodecType);
+INSTANTIATE_META_FUNCTIONS(VideoCodecType);
+INSTANTIATE_META_FUNCTIONS(ContainerFormatType);
+INSTANTIATE_META_FUNCTIONS(VisualizationType);
+*/
+#endif //Q_CC_MINGW
+} // namespace Phonon
+
+#endif //QT_NO_PHONON_OBJECTDESCRIPTIONMODEL
+
+QT_END_NAMESPACE