remove usage of Engine singleton in InterfacesModel

This commit is contained in:
Michael Zanetti 2018-08-31 17:55:59 +02:00
parent 54d8099bec
commit fc0f57ae07
11 changed files with 41 additions and 28 deletions

View File

@ -78,7 +78,7 @@ DeviceClass *DeviceClasses::getDeviceClass(QUuid deviceClassId) const
return deviceClass;
}
}
return 0;
return nullptr;
}
void DeviceClasses::addDeviceClass(DeviceClass *deviceClass)
@ -87,6 +87,7 @@ void DeviceClasses::addDeviceClass(DeviceClass *deviceClass)
//qDebug() << "DeviceClasses: loaded deviceClass" << deviceClass->name();
m_deviceClasses.append(deviceClass);
endInsertRows();
emit countChanged();
}
void DeviceClasses::clearModel()
@ -96,6 +97,7 @@ void DeviceClasses::clearModel()
qDeleteAll(m_deviceClasses);
m_deviceClasses.clear();
endResetModel();
emit countChanged();
}
QHash<int, QByteArray> DeviceClasses::roleNames() const

View File

@ -30,6 +30,7 @@
class DeviceClasses : public QAbstractListModel
{
Q_OBJECT
Q_PROPERTY(int count READ rowCount NOTIFY countChanged)
public:
enum Role {
RoleId,
@ -54,6 +55,9 @@ public:
void clearModel();
signals:
void countChanged();
protected:
QHash<int, QByteArray> roleNames() const;

View File

@ -137,7 +137,7 @@ void DeviceManager::getVendorsResponse(const QVariantMap &params)
if (params.value("params").toMap().keys().contains("vendors")) {
QVariantList vendorList = params.value("params").toMap().value("vendors").toList();
foreach (QVariant vendorVariant, vendorList) {
Vendor *vendor = JsonTypes::unpackVendor(vendorVariant.toMap(), Engine::instance()->deviceManager()->vendors());
Vendor *vendor = JsonTypes::unpackVendor(vendorVariant.toMap());
m_vendors->addVendor(vendor);
// qDebug() << "Added Vendor:" << vendor->name();
}

View File

@ -26,6 +26,7 @@
#include "types/vendors.h"
#include "devices.h"
#include "deviceclasses.h"
#include "interfacesmodel.h"
#include "types/plugins.h"
#include "jsonrpc/jsonhandler.h"
#include "jsonrpc/jsonrpcclient.h"
@ -48,7 +49,7 @@ public:
};
Q_ENUM(RemovePolicy)
explicit DeviceManager(JsonRpcClient *jsonclient, QObject *parent = 0);
explicit DeviceManager(JsonRpcClient *jsonclient, QObject *parent = nullptr);
void clear();
void init();

View File

@ -2,9 +2,10 @@
#include "engine.h"
InterfacesModel::InterfacesModel(QObject *parent) : QAbstractListModel(parent)
InterfacesModel::InterfacesModel(QObject *parent):
QAbstractListModel(parent)
{
}
int InterfacesModel::rowCount(const QModelIndex &parent) const
@ -29,20 +30,23 @@ QHash<int, QByteArray> InterfacesModel::roleNames() const
return roles;
}
Devices *InterfacesModel::devices() const
DeviceManager *InterfacesModel::deviceManager() const
{
return m_devices;
return m_deviceManager;
}
void InterfacesModel::setDevices(Devices *devices)
void InterfacesModel::setDeviceManager(DeviceManager *deviceManager)
{
if (m_devices != devices) {
m_devices = devices;
emit devicesChanged();
if (m_deviceManager != deviceManager) {
m_deviceManager = deviceManager;
emit deviceManagerChanged();
connect(m_deviceManager->devices(), &Devices::countChanged, this, [this]() {
syncInterfaces();
});
connect(m_deviceManager->deviceClasses(), &DeviceClasses::countChanged, this, [this]() {
syncInterfaces();
});
syncInterfaces();
connect(devices, &Devices::rowsInserted, this, &InterfacesModel::rowsChanged);
connect(devices, &Devices::rowsRemoved, this, &InterfacesModel::rowsChanged);
}
}
@ -77,13 +81,12 @@ void InterfacesModel::setShowUncategorized(bool showUncategorized)
void InterfacesModel::syncInterfaces()
{
if (!m_devices) {
if (!m_deviceManager) {
return;
}
QStringList interfacesInSource;
for (int i = 0; i < m_devices->rowCount(); i++) {
DeviceClass *dc = Engine::instance()->deviceManager()->deviceClasses()->getDeviceClass(m_devices->get(i)->deviceClassId());
for (int i = 0; i < m_deviceManager->devices()->rowCount(); i++) {
DeviceClass *dc = m_deviceManager->deviceClasses()->getDeviceClass(m_deviceManager->devices()->get(i)->deviceClassId());
// qDebug() << "device" <<dc->name() << "has interfaces" << dc->interfaces();
bool isInShownIfaces = false;

View File

@ -6,11 +6,13 @@
#include "devices.h"
class DeviceManager;
class InterfacesModel : public QAbstractListModel
{
Q_OBJECT
Q_PROPERTY(int count READ rowCount NOTIFY countChanged)
Q_PROPERTY(Devices* devices READ devices WRITE setDevices NOTIFY devicesChanged)
Q_PROPERTY(DeviceManager* deviceManager READ deviceManager WRITE setDeviceManager NOTIFY deviceManagerChanged)
Q_PROPERTY(QStringList shownInterfaces READ shownInterfaces WRITE setShownInterfaces NOTIFY shownInterfacesChanged)
Q_PROPERTY(bool showUncategorized READ showUncategorized WRITE setShowUncategorized NOTIFY showUncategorizedChanged)
@ -26,8 +28,8 @@ public:
QVariant data(const QModelIndex &index, int role) const override;
QHash<int, QByteArray> roleNames() const override;
Devices* devices() const;
void setDevices(Devices *devices);
DeviceManager* deviceManager() const;
void setDeviceManager(DeviceManager *deviceManager);
QStringList shownInterfaces() const;
void setShownInterfaces(const QStringList &shownInterfaces);
@ -37,7 +39,7 @@ public:
signals:
void countChanged();
void devicesChanged();
void deviceManagerChanged();
void shownInterfacesChanged();
void showUncategorizedChanged();
@ -46,7 +48,7 @@ private slots:
void rowsChanged(const QModelIndex &index, int first, int last);
private:
Devices *m_devices = nullptr;
DeviceManager *m_deviceManager = nullptr;
QStringList m_interfaces;
QStringList m_shownInterfaces;

View File

@ -48,9 +48,9 @@ JsonTypes::JsonTypes(QObject *parent) :
{
}
Vendor *JsonTypes::unpackVendor(const QVariantMap &vendorMap, QObject *parent)
Vendor *JsonTypes::unpackVendor(const QVariantMap &vendorMap)
{
Vendor *v = new Vendor(vendorMap.value("id").toUuid(), vendorMap.value("name").toString(), parent);
Vendor *v = new Vendor(vendorMap.value("id").toUuid(), vendorMap.value("name").toString());
v->setDisplayName(vendorMap.value("displayName").toString());
return v;
}

View File

@ -54,7 +54,7 @@ class JsonTypes : public QObject
public:
explicit JsonTypes(QObject *parent = 0);
static Vendor *unpackVendor(const QVariantMap &vendorMap, QObject *parent);
static Vendor *unpackVendor(const QVariantMap &vendorMap);
static Plugin *unpackPlugin(const QVariantMap &pluginMap, QObject *parent);
static DeviceClass *unpackDeviceClass(const QVariantMap &deviceClassMap, QObject *parent);
static void unpackParam(const QVariantMap &paramMap, Param *param);

View File

@ -74,6 +74,7 @@ QVariant Vendors::data(const QModelIndex &index, int role) const
void Vendors::addVendor(Vendor *vendor)
{
vendor->setParent(this);
beginInsertRows(QModelIndex(), m_vendors.count(), m_vendors.count());
//qDebug() << "Vendors: loaded vendor" << vendor->name();
m_vendors.append(vendor);

View File

@ -109,7 +109,7 @@ Page {
height: swipeView.height
model: InterfacesSortModel {
interfacesModel: InterfacesModel {
devices: Engine.deviceManager.devices
deviceManager: Engine.deviceManager
shownInterfaces: app.supportedInterfaces
}
}

View File

@ -21,7 +21,7 @@ Item {
model: InterfacesModel {
id: interfacesModel
devices: Engine.deviceManager.devices
deviceManager: Engine.deviceManager
}
cellWidth: width / tilesPerRow
cellHeight: cellWidth