summaryrefslogtreecommitdiffstats
path: root/src/PulseAudioQt/models.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/PulseAudioQt/models.h')
-rw-r--r--src/PulseAudioQt/models.h163
1 files changed, 163 insertions, 0 deletions
diff --git a/src/PulseAudioQt/models.h b/src/PulseAudioQt/models.h
new file mode 100644
index 0000000..733e9e4
--- /dev/null
+++ b/src/PulseAudioQt/models.h
@@ -0,0 +1,163 @@
+/*
+ SPDX-FileCopyrightText: 2014-2015 Harald Sitter <sitter@kde.org>
+ SPDX-FileCopyrightText: 2016 David Rosca <nowrep@gmail.com>
+
+ SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
+*/
+
+#ifndef PULSEAUDIO_H
+#define PULSEAUDIO_H
+
+#include <QAbstractListModel>
+
+#include "pulseaudioqt_export.h"
+
+namespace PulseAudioQt
+{
+class Context;
+class MapBaseQObject;
+class Sink;
+class Source;
+class AbstractModelPrivate;
+class SinkModelPrivate;
+
+class PULSEAUDIOQT_EXPORT AbstractModel : public QAbstractListModel
+{
+ Q_OBJECT
+public:
+ enum ItemRole { PulseObjectRole = Qt::UserRole + 1 };
+
+ Q_PROPERTY(int count READ rowCount NOTIFY countChanged)
+
+ ~AbstractModel() override;
+ QHash<int, QByteArray> roleNames() const final override;
+ int rowCount(const QModelIndex &parent = QModelIndex()) const final override;
+ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
+ bool setData(const QModelIndex &index, const QVariant &value, int role) final override;
+
+ Q_INVOKABLE int role(const QByteArray &roleName) const;
+
+Q_SIGNALS:
+ void countChanged();
+
+protected:
+ AbstractModel(const MapBaseQObject *map, QObject *parent);
+ void initRoleNames(const QMetaObject &qobjectMetaObject);
+ Context *context() const;
+
+private Q_SLOTS:
+ void propertyChanged();
+
+private:
+ void onDataAdded(int index);
+ void onDataRemoved(int index);
+ QMetaMethod propertyChangedMetaMethod() const;
+
+ AbstractModelPrivate *d;
+
+ // Prevent leaf-classes from default constructing as we want to enforce
+ // them passing us a context or explicit nullptrs.
+ AbstractModel()
+ {
+ }
+};
+
+class PULSEAUDIOQT_EXPORT CardModel : public AbstractModel
+{
+ Q_OBJECT
+public:
+ CardModel(QObject *parent = nullptr);
+
+private:
+ void *d;
+};
+
+class PULSEAUDIOQT_EXPORT SinkModel : public AbstractModel
+{
+ Q_OBJECT
+ Q_PROPERTY(PulseAudioQt::Sink *defaultSink READ defaultSink NOTIFY defaultSinkChanged)
+ Q_PROPERTY(PulseAudioQt::Sink *preferredSink READ preferredSink NOTIFY preferredSinkChanged)
+public:
+ enum ItemRole { SortByDefaultRole = PulseObjectRole + 1 };
+ Q_ENUM(ItemRole)
+
+ SinkModel(QObject *parent = nullptr);
+ virtual ~SinkModel();
+ Sink *defaultSink() const;
+ Sink *preferredSink() const;
+ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
+
+Q_SIGNALS:
+ void defaultSinkChanged();
+ void preferredSinkChanged();
+
+private:
+ void sinkAdded(int index);
+ void sinkRemoved(int index);
+ void updatePreferredSink();
+ Sink *findPreferredSink() const;
+ SinkModelPrivate *d;
+};
+
+class PULSEAUDIOQT_EXPORT SinkInputModel : public AbstractModel
+{
+ Q_OBJECT
+public:
+ SinkInputModel(QObject *parent = nullptr);
+
+private:
+ void *d;
+};
+
+class PULSEAUDIOQT_EXPORT SourceModel : public AbstractModel
+{
+ Q_OBJECT
+ Q_PROPERTY(PulseAudioQt::Source *defaultSource READ defaultSource NOTIFY defaultSourceChanged)
+public:
+ enum ItemRole { SortByDefaultRole = PulseObjectRole + 1 };
+ Q_ENUM(ItemRole)
+
+ SourceModel(QObject *parent = nullptr);
+ Source *defaultSource() const;
+ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
+
+Q_SIGNALS:
+ void defaultSourceChanged();
+
+private:
+ void *d;
+};
+
+class PULSEAUDIOQT_EXPORT SourceOutputModel : public AbstractModel
+{
+ Q_OBJECT
+public:
+ SourceOutputModel(QObject *parent = nullptr);
+
+private:
+ void *d;
+};
+
+class PULSEAUDIOQT_EXPORT StreamRestoreModel : public AbstractModel
+{
+ Q_OBJECT
+public:
+ StreamRestoreModel(QObject *parent = nullptr);
+
+private:
+ void *d;
+};
+
+class PULSEAUDIOQT_EXPORT ModuleModel : public AbstractModel
+{
+ Q_OBJECT
+public:
+ ModuleModel(QObject *parent = nullptr);
+
+private:
+ void *d;
+};
+
+} // PulseAudioQt
+
+#endif // PULSEAUDIO_H