File indexing completed on 2024-05-12 15:32:33

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 "declarativemediaplayer.h"
0014 
0015 DeclarativeDevicesModel::DeclarativeDevicesModel(QObject *parent)
0016     : QSortFilterProxyModel(parent)
0017     , m_manager(nullptr)
0018     , m_model(nullptr)
0019 {
0020 }
0021 
0022 DeclarativeManager *DeclarativeDevicesModel::manager() const
0023 {
0024     return m_manager;
0025 }
0026 
0027 void DeclarativeDevicesModel::setManager(DeclarativeManager *manager)
0028 {
0029     m_manager = manager;
0030     m_model = new BluezQt::DevicesModel(m_manager, this);
0031     setSourceModel(m_model);
0032 }
0033 
0034 QHash<int, QByteArray> DeclarativeDevicesModel::roleNames() const
0035 {
0036     QHash<int, QByteArray> roles = QSortFilterProxyModel::roleNames();
0037 
0038     roles[DeviceRole] = QByteArrayLiteral("Device");
0039     roles[AdapterRole] = QByteArrayLiteral("Adapter");
0040     roles[MediaPlayerRole] = QByteArrayLiteral("MediaPlayer");
0041     roles[BatteryRole] = QByteArrayLiteral("Battery");
0042 
0043     return roles;
0044 }
0045 
0046 QVariant DeclarativeDevicesModel::data(const QModelIndex &index, int role) const
0047 {
0048     if (!m_model) {
0049         return QSortFilterProxyModel::data(index, role);
0050     }
0051 
0052     BluezQt::DevicePtr dev = m_model->device(mapToSource(index));
0053     if (!dev) {
0054         return QSortFilterProxyModel::data(index, role);
0055     }
0056 
0057     switch (role) {
0058     case DeviceRole:
0059         return QVariant::fromValue(m_manager->declarativeDeviceFromPtr(dev));
0060     case AdapterRole:
0061         return QVariant::fromValue(m_manager->declarativeAdapterFromPtr(dev->adapter()));
0062     case MediaPlayerRole:
0063         if (DeclarativeDevice *device = m_manager->declarativeDeviceFromPtr(dev)) {
0064             return QVariant::fromValue(device->mediaPlayer());
0065         }
0066         break;
0067     case BatteryRole:
0068         if (DeclarativeDevice *device = m_manager->declarativeDeviceFromPtr(dev)) {
0069             return QVariant::fromValue(device->battery());
0070         }
0071         break;
0072     }
0073 
0074     return QSortFilterProxyModel::data(index, role);
0075 }
0076 
0077 #include "moc_declarativedevicesmodel.cpp"