diff --git a/declarative/declarative.pro b/declarative/declarative.pro index acf1368..dd7c01a 100644 --- a/declarative/declarative.pro +++ b/declarative/declarative.pro @@ -15,9 +15,11 @@ CONFIG += plugin target.path = $$TARGETPATH -HEADERS = declarativessufeaturemodel.h +HEADERS = declarativessufeaturemodel.h \ + declarativessudeviceinfo.h SOURCES += plugin.cpp \ - declarativessufeaturemodel.cpp + declarativessufeaturemodel.cpp \ + declarativessudeviceinfo.cpp qmldir.files = qmldir *.qml *.js qmldir.path = $$target.path diff --git a/declarative/declarativessudeviceinfo.cpp b/declarative/declarativessudeviceinfo.cpp new file mode 100644 index 0000000..23c49f5 --- /dev/null +++ b/declarative/declarativessudeviceinfo.cpp @@ -0,0 +1,33 @@ +/** + * @file declarativessufeaturemodel.cpp + * @copyright 2016 Jolla Ltd. + * @author Martin Jones + * @date 2016 + */ + +#include "declarativessudeviceinfo.h" + +DeclarativeSsuDeviceInfo::DeclarativeSsuDeviceInfo() +{ +} + +QString DeclarativeSsuDeviceInfo::deviceFamily() +{ + return info.deviceFamily(); +} + +QString DeclarativeSsuDeviceInfo::deviceVariant(bool fallback) +{ + return info.deviceVariant(fallback); +} + +QString DeclarativeSsuDeviceInfo::deviceModel() +{ + return info.deviceModel(); +} + +QString DeclarativeSsuDeviceInfo::displayName(const int type) +{ + return info.displayName(type); +} + diff --git a/declarative/declarativessudeviceinfo.h b/declarative/declarativessudeviceinfo.h new file mode 100644 index 0000000..8ed6cab --- /dev/null +++ b/declarative/declarativessudeviceinfo.h @@ -0,0 +1,63 @@ +/** + * @file declarativessufeaturemodel.h + * @copyright 2016 Jolla Ltd. + * @author Martin Jones + * @date 2016 + */ + +#ifndef _DECLARATIVESSUDEVICEINFO_H +#define _DECLARATIVESSUDEVICEINFO_H + +#include "../libssu/ssudeviceinfo.h" + +class DeclarativeSsuDeviceInfo : public QObject +{ + Q_OBJECT + Q_ENUMS(DisplayType) +public: + /** + * A list of types ssu provides shiny values suitable for displaying + */ + enum DisplayType { + DeviceManufacturer = Ssu::DeviceManufacturer, ///< Manufacturer, like ACME Corp. Board mappings key "deviceManufacturer" + DeviceModel = Ssu::DeviceModel, ///< Marketed device name, like Pogoblaster 3000. Board mappings key "prettyModel" + DeviceDesignation = Ssu::DeviceDesignation, ///< Type designation, like NCC-1701. Beard mappings key "deviceDesignation" + }; + + DeclarativeSsuDeviceInfo(); + + /** + * Try to find the device family for the system this is running on. This function + * temporarily changes the detected model, and therefore should not be used in a + * multithreaded environment, unless you like funny results. + */ + Q_INVOKABLE QString deviceFamily(); + /** + * Try to find the device variant for the system this is running on. + * If the device is not a variant it will return an empty string. If + * fallback is set to true it return the device model in this case. + */ + Q_INVOKABLE QString deviceVariant(bool fallback=false); + /** + * Try to find out ond what kind of system this is running + */ + Q_INVOKABLE QString deviceModel(); + /** + * Return a string suitable for display in dialogs, ... + * + * See DeviceTypes for supported types. + * + * If not configured the model name used by ssu will be returned instead + * for product and type. + * If no manufacturer is found UNKNOWN is returned. + * For an invalid type an empty string is returned. + */ + Q_INVOKABLE QString displayName(const int type); + +private: + SsuDeviceInfo info; +}; + +#endif + + diff --git a/declarative/plugin.cpp b/declarative/plugin.cpp index 392ec63..e1fa649 100644 --- a/declarative/plugin.cpp +++ b/declarative/plugin.cpp @@ -10,6 +10,12 @@ #include #include "declarativessufeaturemodel.h" +#include "declarativessudeviceinfo.h" + +static QObject *device_info_factory(QQmlEngine *, QJSEngine *) +{ + return new DeclarativeSsuDeviceInfo; +} class NemoSsuPlugin : public QQmlExtensionPlugin { @@ -20,6 +26,7 @@ class NemoSsuPlugin : public QQmlExtensionPlugin virtual void registerTypes(const char *) { qmlRegisterType("Nemo.Ssu", 1, 0, "FeatureModel"); + qmlRegisterSingletonType("Nemo.Ssu", 1, 1, "DeviceInfo", device_info_factory); } };