Merge PR #703: Add support for the providedInterfaces thing class property

This commit is contained in:
Jenkins nymea 2021-11-12 12:14:46 +01:00
commit 10f6c0ba9c
8 changed files with 55 additions and 10 deletions

View File

@ -70,6 +70,21 @@ void ThingClassesProxy::setFilterInterface(const QString &filterInterface)
} }
} }
bool ThingClassesProxy::includeProvidedInterfaces() const
{
return m_includeProvidedInterfaces;
}
void ThingClassesProxy::setIncludeProvidedInterfaces(bool includeProvidedInterfaces)
{
if (m_includeProvidedInterfaces != includeProvidedInterfaces) {
m_includeProvidedInterfaces = includeProvidedInterfaces;
emit includeProvidedInterfacesChanged();
invalidateFilter();
emit countChanged();
}
}
QString ThingClassesProxy::filterDisplayName() const QString ThingClassesProxy::filterDisplayName() const
{ {
return m_filterDisplayName; return m_filterDisplayName;
@ -207,7 +222,11 @@ bool ThingClassesProxy::filterAcceptsRow(int sourceRow, const QModelIndex &sourc
return false; return false;
if (!m_filterInterface.isEmpty() && !thingClass->interfaces().contains(m_filterInterface)) { if (!m_filterInterface.isEmpty() && !thingClass->interfaces().contains(m_filterInterface)) {
return false; if (!m_includeProvidedInterfaces) {
return false;
} else if (!thingClass->providedInterfaces().contains(m_filterInterface)) {
return false;
}
} }
if (!m_filterDisplayName.isEmpty() && !thingClass->displayName().toLower().contains(m_filterDisplayName.toLower())) { if (!m_filterDisplayName.isEmpty() && !thingClass->displayName().toLower().contains(m_filterDisplayName.toLower())) {

View File

@ -46,6 +46,7 @@ class ThingClassesProxy : public QSortFilterProxyModel
Q_PROPERTY(Engine *engine READ engine WRITE setEngine NOTIFY engineChanged) Q_PROPERTY(Engine *engine READ engine WRITE setEngine NOTIFY engineChanged)
Q_PROPERTY(QString filterInterface READ filterInterface WRITE setFilterInterface NOTIFY filterInterfaceChanged) Q_PROPERTY(QString filterInterface READ filterInterface WRITE setFilterInterface NOTIFY filterInterfaceChanged)
Q_PROPERTY(bool includeProvidedInterfaces READ includeProvidedInterfaces WRITE setIncludeProvidedInterfaces NOTIFY includeProvidedInterfacesChanged)
Q_PROPERTY(QString filterDisplayName READ filterDisplayName WRITE setFilterDisplayName NOTIFY filterDisplayNameChanged) Q_PROPERTY(QString filterDisplayName READ filterDisplayName WRITE setFilterDisplayName NOTIFY filterDisplayNameChanged)
Q_PROPERTY(QUuid filterVendorId READ filterVendorId WRITE setFilterVendorId NOTIFY filterVendorIdChanged) Q_PROPERTY(QUuid filterVendorId READ filterVendorId WRITE setFilterVendorId NOTIFY filterVendorIdChanged)
Q_PROPERTY(QString filterVendorName READ filterVendorName WRITE setFilterVendorName NOTIFY filterVendorNameChanged) Q_PROPERTY(QString filterVendorName READ filterVendorName WRITE setFilterVendorName NOTIFY filterVendorNameChanged)
@ -67,6 +68,9 @@ public:
QString filterInterface() const; QString filterInterface() const;
void setFilterInterface(const QString &filterInterface); void setFilterInterface(const QString &filterInterface);
bool includeProvidedInterfaces() const;
void setIncludeProvidedInterfaces(bool includeProvidedInterfaces);
QString filterDisplayName() const; QString filterDisplayName() const;
void setFilterDisplayName(const QString &filter); void setFilterDisplayName(const QString &filter);
@ -95,6 +99,7 @@ public:
signals: signals:
void engineChanged(); void engineChanged();
void filterInterfaceChanged(); void filterInterfaceChanged();
void includeProvidedInterfacesChanged();
void filterDisplayNameChanged(); void filterDisplayNameChanged();
void filterVendorIdChanged(); void filterVendorIdChanged();
void filterVendorNameChanged(); void filterVendorNameChanged();
@ -111,6 +116,7 @@ protected:
private: private:
Engine *m_engine = nullptr; Engine *m_engine = nullptr;
QString m_filterInterface; QString m_filterInterface;
bool m_includeProvidedInterfaces = false;
QString m_filterDisplayName; QString m_filterDisplayName;
QUuid m_filterVendorId; QUuid m_filterVendorId;
QString m_filterVendorName; QString m_filterVendorName;

View File

@ -774,6 +774,7 @@ ThingClass *ThingManager::unpackThingClass(const QVariantMap &thingClassMap)
thingClass->setCreateMethods(createMethods); thingClass->setCreateMethods(createMethods);
thingClass->setSetupMethod(stringToSetupMethod(thingClassMap.value("setupMethod").toString())); thingClass->setSetupMethod(stringToSetupMethod(thingClassMap.value("setupMethod").toString()));
thingClass->setInterfaces(thingClassMap.value("interfaces").toStringList()); thingClass->setInterfaces(thingClassMap.value("interfaces").toStringList());
thingClass->setProvidedInterfaces(thingClassMap.value("providedInterfaces").toStringList());
// ParamTypes // ParamTypes
ParamTypes *paramTypes = new ParamTypes(thingClass); ParamTypes *paramTypes = new ParamTypes(thingClass);

View File

@ -117,6 +117,16 @@ void ThingClass::setInterfaces(const QStringList &interfaces)
m_interfaces = interfaces; m_interfaces = interfaces;
} }
QStringList ThingClass::providedInterfaces() const
{
return m_providedInterfaces;
}
void ThingClass::setProvidedInterfaces(const QStringList &providedInterfaces)
{
m_providedInterfaces = providedInterfaces;
}
QString ThingClass::baseInterface() const QString ThingClass::baseInterface() const
{ {
foreach (const QString &interface, m_interfaces) { foreach (const QString &interface, m_interfaces) {

View File

@ -52,6 +52,7 @@ class ThingClass : public QObject
Q_PROPERTY(QStringList createMethods READ createMethods CONSTANT) Q_PROPERTY(QStringList createMethods READ createMethods CONSTANT)
Q_PROPERTY(SetupMethod setupMethod READ setupMethod CONSTANT) Q_PROPERTY(SetupMethod setupMethod READ setupMethod CONSTANT)
Q_PROPERTY(QStringList interfaces READ interfaces CONSTANT) Q_PROPERTY(QStringList interfaces READ interfaces CONSTANT)
Q_PROPERTY(QStringList providedInterfaces READ providedInterfaces CONSTANT)
Q_PROPERTY(QString baseInterface READ baseInterface CONSTANT) Q_PROPERTY(QString baseInterface READ baseInterface CONSTANT)
Q_PROPERTY(bool browsable READ browsable CONSTANT) Q_PROPERTY(bool browsable READ browsable CONSTANT)
Q_PROPERTY(ParamTypes *paramTypes READ paramTypes NOTIFY paramTypesChanged) Q_PROPERTY(ParamTypes *paramTypes READ paramTypes NOTIFY paramTypesChanged)
@ -100,6 +101,9 @@ public:
QStringList interfaces() const; QStringList interfaces() const;
void setInterfaces(const QStringList &interfaces); void setInterfaces(const QStringList &interfaces);
QStringList providedInterfaces() const;
void setProvidedInterfaces(const QStringList &providedInterfaces);
QString baseInterface() const; QString baseInterface() const;
bool browsable() const; bool browsable() const;
@ -146,6 +150,7 @@ private:
QStringList m_createMethods; QStringList m_createMethods;
SetupMethod m_setupMethod; SetupMethod m_setupMethod;
QStringList m_interfaces; QStringList m_interfaces;
QStringList m_providedInterfaces;
bool m_browsable = false; bool m_browsable = false;
ParamTypes *m_paramTypes = nullptr; ParamTypes *m_paramTypes = nullptr;

View File

@ -226,6 +226,8 @@ ApplicationWindow {
return qsTr("Smart meters"); return qsTr("Smart meters");
case "heating": case "heating":
return qsTr("Heating"); return qsTr("Heating");
case "cooling":
return qsTr("Cooling");
case "thermostat": case "thermostat":
return qsTr("Thermostats"); return qsTr("Thermostats");
case "evcharger": case "evcharger":
@ -360,6 +362,8 @@ ApplicationWindow {
return Qt.resolvedUrl("images/fingerprint.svg") return Qt.resolvedUrl("images/fingerprint.svg")
case "accesscontrol": case "accesscontrol":
return Qt.resolvedUrl("images/lock-closed.svg"); return Qt.resolvedUrl("images/lock-closed.svg");
case "solarinverter":
return Qt.resolvedUrl("images/weathericons/weather-clear-day.svg")
case "smartmeter": case "smartmeter":
case "smartmeterconsumer": case "smartmeterconsumer":
case "smartmeterproducer": case "smartmeterproducer":

View File

@ -149,12 +149,13 @@ Page {
id: thingClassesProxy id: thingClassesProxy
engine: _engine engine: _engine
filterInterface: typeFilterModel.get(typeFilterComboBox.currentIndex).interfaceName filterInterface: typeFilterModel.get(typeFilterComboBox.currentIndex).interfaceName
includeProvidedInterfaces: true
filterVendorId: vendorFilterComboBox.currentIndex >= 0 ? vendorsFilterModel.get(vendorFilterComboBox.currentIndex).vendorId : "" filterVendorId: vendorFilterComboBox.currentIndex >= 0 ? vendorsFilterModel.get(vendorFilterComboBox.currentIndex).vendorId : ""
filterString: displayNameFilterField.displayText filterString: displayNameFilterField.displayText
groupByInterface: true groupByInterface: true
} }
delegate: NymeaSwipeDelegate { delegate: NymeaItemDelegate {
id: tingClassDelegate id: tingClassDelegate
width: parent.width width: parent.width
text: model.displayName text: model.displayName

View File

@ -64,16 +64,15 @@ SettingsPageBase {
text: qsTr("Interfaces") text: qsTr("Interfaces")
} }
Repeater { Label {
model: root.thingClass.interfaces Layout.fillWidth: true
delegate: Label { Layout.leftMargin: Style.margins
Layout.fillWidth: true Layout.rightMargin: Style.margins
Layout.leftMargin: Style.margins wrapMode: Text.WordWrap
Layout.rightMargin: Style.margins text: root.thingClass.interfaces.join(", ") + (root.thingClass.providedInterfaces.length > 0 ? " (" + root.thingClass.providedInterfaces.join(", ") + ")" : "")
text: modelData
}
} }
SettingsPageSectionHeader { SettingsPageSectionHeader {
text: qsTr("Parameters") text: qsTr("Parameters")
visible: root.thingClass.paramTypes.count > 0 visible: root.thingClass.paramTypes.count > 0