QGIS API Documentation 3.41.0-Master (af5edcb665c)
Loading...
Searching...
No Matches
qgssensorguiregistry.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgssensorguiregistry.h
3 --------------------------
4 begin : March 2023
5 copyright : (C) 2023 by Mathieu Pellerin
6 email : mathieu at opengis dot ch
7 ***************************************************************************/
8/***************************************************************************
9 * *
10 * This program is free software; you can redistribute it and/or modify *
11 * it under the terms of the GNU General Public License as published by *
12 * the Free Software Foundation; either version 2 of the License, or *
13 * (at your option) any later version. *
14 * *
15 ***************************************************************************/
16
17#include "qgsconfig.h"
18
20#include "moc_qgssensorguiregistry.cpp"
21#include "qgssensorwidget.h"
22
24 : QObject( parent )
25{
26}
27
29{
30 qDeleteAll( mMetadata );
31}
32
34{
35 if ( !mMetadata.isEmpty() )
36 return false;
37
38 addSensorGuiMetadata( new QgsSensorGuiMetadata( QStringLiteral( "tcp_socket" ), QObject::tr( "TCP socket sensor" ), QgsApplication::getThemeIcon( QStringLiteral( "/mSensor.svg" ) ), [=]( QgsAbstractSensor *sensor ) -> QgsAbstractSensorWidget * {
39 QgsTcpSocketSensorWidget *widget = new QgsTcpSocketSensorWidget( nullptr );
40 widget->setSensor( sensor );
41 return widget; }, nullptr ) );
42 addSensorGuiMetadata( new QgsSensorGuiMetadata( QStringLiteral( "udp_socket" ), QObject::tr( "UDP socket sensor" ), QgsApplication::getThemeIcon( QStringLiteral( "/mSensor.svg" ) ), [=]( QgsAbstractSensor *sensor ) -> QgsAbstractSensorWidget * {
43 QgsUdpSocketSensorWidget *widget = new QgsUdpSocketSensorWidget( nullptr );
44 widget->setSensor( sensor );
45 return widget; }, nullptr ) );
46#if defined( HAVE_QTSERIALPORT )
47 addSensorGuiMetadata( new QgsSensorGuiMetadata( QStringLiteral( "serial_port" ), QObject::tr( "Serial port sensor" ), QgsApplication::getThemeIcon( QStringLiteral( "/mSensor.svg" ) ), [=]( QgsAbstractSensor *sensor ) -> QgsAbstractSensorWidget * {
48 QgsSerialPortSensorWidget *widget = new QgsSerialPortSensorWidget( nullptr );
49 widget->setSensor( sensor );
50 return widget; }, nullptr ) );
51#endif
52 return true;
53}
54
56{
57 return mMetadata.value( type );
58}
59
61{
62 if ( !metadata || mMetadata.contains( metadata->type() ) )
63 return false;
64
65 mMetadata[metadata->type()] = metadata;
66 emit sensorAdded( metadata->type(), metadata->visibleName() );
67 return true;
68}
69
70QgsAbstractSensor *QgsSensorGuiRegistry::createSensor( const QString &type, QObject *parent ) const
71{
72 if ( !mMetadata.contains( type ) )
73 return nullptr;
74
75 std::unique_ptr<QgsAbstractSensor> sensor( mMetadata.value( type )->createSensor( parent ) );
76 if ( sensor )
77 return sensor.release();
78
79 return QgsApplication::sensorRegistry()->createSensor( type, parent );
80}
81
83{
84 if ( !sensor || !mMetadata.contains( sensor->type() ) )
85 return nullptr;
86
87 return mMetadata[sensor->type()]->createSensorWidget( sensor );
88}
89
90QMap<QString, QString> QgsSensorGuiRegistry::sensorTypes() const
91{
92 QMap<QString, QString> types;
93 for ( auto it = mMetadata.constBegin(); it != mMetadata.constEnd(); ++it )
94 {
95 types.insert( it.key(), it.value()->visibleName() );
96 }
97
98 return types;
99}
Base class for widgets which allow control over the properties of sensors.
An abstract base class for sensor classes.
virtual QString type() const
Returns the sensor type.
static QgsSensorRegistry * sensorRegistry()
Returns the application's sensor registry, used for sensor types.
static QIcon getThemeIcon(const QString &name, const QColor &fillColor=QColor(), const QColor &strokeColor=QColor())
Helper to get a theme icon.
Stores GUI metadata about one sensor class.
QString type() const
Returns the unique type code for the sensor class.
QString visibleName() const
Returns a translated, user visible name identifying the corresponding sensor.
Convenience metadata class that uses static functions to handle sensor GUI behavior.
QgsSensorGuiRegistry(QObject *parent=nullptr)
Creates a new empty sensor GUI registry.
QgsSensorAbstractGuiMetadata * sensorMetadata(const QString &type) const
Returns the metadata for the specified sensor type.
QgsAbstractSensor * createSensor(const QString &type, QObject *parent=nullptr) const
Creates a new instance of a sensor given the type.
bool populate()
Populates the registry with standard sensor types.
void sensorAdded(const QString &type, const QString &name)
Emitted whenever a new sensor type is added to the registry, with the specified type.
QMap< QString, QString > sensorTypes() const
Returns a list of sensor types handled by the registry.
QgsAbstractSensorWidget * createSensorWidget(QgsAbstractSensor *sensor) const
Creates a new instance of a sensor configuration widget for the specified sensor.
bool addSensorGuiMetadata(QgsSensorAbstractGuiMetadata *metadata)
Registers the GUI metadata for a new sensor type.
QgsAbstractSensor * createSensor(const QString &type, QObject *parent=nullptr) const
Creates a new instance of a sensor given the type.