File indexing completed on 2024-05-19 03:54:35

0001 /*
0002  * BluezQt - Asynchronous Bluez wrapper library
0003  *
0004  * SPDX-FileCopyrightText: 2014 David Rosca <nowrep@gmail.com>
0005  *
0006  * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0007  */
0008 
0009 #include "declarativedevicesmodel.h"
0010 #include "declarativeadapter.h"
0011 #include "declarativebattery.h"
0012 #include "declarativedevice.h"
0013 #include "declarativemanager.h"
0014 #include "declarativemediaplayer.h"
0015 
0016 DeclarativeDevicesModel::DeclarativeDevicesModel(QObject *parent)
0017     : QSortFilterProxyModel(parent)
0018     , m_manager(nullptr)
0019     , m_model(nullptr)
0020 {
0021 }
0022 
0023 DeclarativeManager *DeclarativeDevicesModel::manager() const
0024 {
0025     return m_manager;
0026 }
0027 
0028 void DeclarativeDevicesModel::setManager(DeclarativeManager *manager)
0029 {
0030     m_manager = manager;
0031     m_model = new BluezQt::DevicesModel(m_manager, this);
0032     setSourceModel(m_model);
0033 }
0034 
0035 QHash<int, QByteArray> DeclarativeDevicesModel::roleNames() const
0036 {
0037     QHash<int, QByteArray> roles = QSortFilterProxyModel::roleNames();
0038 
0039     roles[DeviceRole] = QByteArrayLiteral("Device");
0040     roles[AdapterRole] = QByteArrayLiteral("Adapter");
0041     roles[MediaPlayerRole] = QByteArrayLiteral("MediaPlayer");
0042     roles[BatteryRole] = QByteArrayLiteral("Battery");
0043 
0044     return roles;
0045 }
0046 
0047 QVariant DeclarativeDevicesModel::data(const QModelIndex &index, int role) const
0048 {
0049     if (!m_model) {
0050         return QSortFilterProxyModel::data(index, role);
0051     }
0052 
0053     BluezQt::DevicePtr dev = m_model->device(mapToSource(index));
0054     if (!dev) {
0055         return QSortFilterProxyModel::data(index, role);
0056     }
0057 
0058     switch (role) {
0059     case DeviceRole:
0060         return QVariant::fromValue(m_manager->declarativeDeviceFromPtr(dev));
0061     case AdapterRole:
0062         return QVariant::fromValue(m_manager->declarativeAdapterFromPtr(dev->adapter()));
0063     case MediaPlayerRole:
0064         if (DeclarativeDevice *device = m_manager->declarativeDeviceFromPtr(dev)) {
0065             return QVariant::fromValue(device->mediaPlayer());
0066         }
0067         break;
0068     case BatteryRole:
0069         if (DeclarativeDevice *device = m_manager->declarativeDeviceFromPtr(dev)) {
0070             return QVariant::fromValue(device->battery());
0071         }
0072         break;
0073     }
0074 
0075     return QSortFilterProxyModel::data(index, role);
0076 }
0077 
0078 #include "moc_declarativedevicesmodel.cpp"