QGIS API Documentation 3.99.0-Master (21b3aa880ba)
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"
19
20#include "qgssensorwidget.h"
21
22#include "moc_qgssensorguiregistry.cpp"
23
25 : QObject( parent )
26{
27}
28
30{
31 qDeleteAll( mMetadata );
32}
33
35{
36 if ( !mMetadata.isEmpty() )
37 return false;
38
39 addSensorGuiMetadata( new QgsSensorGuiMetadata( QStringLiteral( "tcp_socket" ), QObject::tr( "TCP socket sensor" ), QgsApplication::getThemeIcon( QStringLiteral( "/mSensor.svg" ) ), []( QgsAbstractSensor *sensor ) -> QgsAbstractSensorWidget * {
40 QgsTcpSocketSensorWidget *widget = new QgsTcpSocketSensorWidget( nullptr );
41 widget->setSensor( sensor );
42 return widget; }, nullptr ) );
43 addSensorGuiMetadata( new QgsSensorGuiMetadata( QStringLiteral( "udp_socket" ), QObject::tr( "UDP socket sensor" ), QgsApplication::getThemeIcon( QStringLiteral( "/mSensor.svg" ) ), []( QgsAbstractSensor *sensor ) -> QgsAbstractSensorWidget * {
44 QgsUdpSocketSensorWidget *widget = new QgsUdpSocketSensorWidget( nullptr );
45 widget->setSensor( sensor );
46 return widget; }, nullptr ) );
47#if defined( HAVE_QTSERIALPORT )
48 addSensorGuiMetadata( new QgsSensorGuiMetadata( QStringLiteral( "serial_port" ), QObject::tr( "Serial port sensor" ), QgsApplication::getThemeIcon( QStringLiteral( "/mSensor.svg" ) ), []( QgsAbstractSensor *sensor ) -> QgsAbstractSensorWidget * {
49 QgsSerialPortSensorWidget *widget = new QgsSerialPortSensorWidget( nullptr );
50 widget->setSensor( sensor );
51 return widget; }, nullptr ) );
52#endif
53 return true;
54}
55
57{
58 return mMetadata.value( type );
59}
60
62{
63 if ( !metadata || mMetadata.contains( metadata->type() ) )
64 return false;
65
66 mMetadata[metadata->type()] = metadata;
67 emit sensorAdded( metadata->type(), metadata->visibleName() );
68 return true;
69}
70
71QgsAbstractSensor *QgsSensorGuiRegistry::createSensor( const QString &type, QObject *parent ) const
72{
73 auto it = mMetadata.constFind( type );
74 if ( it == mMetadata.constEnd() )
75 return nullptr;
76
77 std::unique_ptr<QgsAbstractSensor> sensor( it.value()->createSensor( parent ) );
78 if ( sensor )
79 return sensor.release();
80
81 return QgsApplication::sensorRegistry()->createSensor( type, parent );
82}
83
85{
86 if ( !sensor )
87 return nullptr;
88
89 auto it = mMetadata.constFind( sensor->type() );
90 if ( it == mMetadata.constEnd() )
91 return nullptr;
92
93 return it.value()->createSensorWidget( sensor );
94}
95
96QMap<QString, QString> QgsSensorGuiRegistry::sensorTypes() const
97{
98 QMap<QString, QString> types;
99 for ( auto it = mMetadata.constBegin(); it != mMetadata.constEnd(); ++it )
100 {
101 types.insert( it.key(), it.value()->visibleName() );
102 }
103
104 return types;
105}
Base class for widgets which allow control over the properties of sensors.
An abstract base class for sensors.
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.