QGIS API Documentation  3.18.1-Zürich (202f1bf7e5)
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
qgsrelationwidgetregistry.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  qgsrelationwidgetregistry.h
3  ----------------------
4  begin : October 2020
5  copyright : (C) 2020 by Ivan Ivanov
6  email : ivan@opengis.ch
7  ***************************************************************************/
8 
9 /***************************************************************************
10  * *
11  * This program is free software; you can redistribute it and/or modify *
12  * it under the terms of the GNU General Public License as published by *
13  * the Free Software Foundation; either version 2 of the License, or *
14  * (at your option) any later version. *
15  * *
16  ***************************************************************************/
17 
20 
22 {
24 }
25 
27 {
28  qDeleteAll( mRelationWidgetFactories );
29  mRelationWidgetFactories.clear();
30 }
31 
33 {
34  if ( !widgetFactory )
35  return;
36 
37  if ( mRelationWidgetFactories.contains( widgetFactory->type() ) )
38  return;
39 
40  mRelationWidgetFactories.insert( widgetFactory->type(), widgetFactory );
41 }
42 
43 void QgsRelationWidgetRegistry::removeRelationWidget( const QString &widgetType )
44 {
45  // protect the relation editor widget from removing, so the user has at least one relation widget type
46  if ( dynamic_cast<QgsRelationEditorWidgetFactory *>( mRelationWidgetFactories.value( widgetType ) ) )
47  return;
48 
49  mRelationWidgetFactories.remove( widgetType );
50 }
51 
53 {
54  return mRelationWidgetFactories.keys();
55 }
56 
57 QMap<QString, QgsAbstractRelationEditorWidgetFactory *> QgsRelationWidgetRegistry::factories() const
58 {
59  return mRelationWidgetFactories;
60 }
61 
62 QgsAbstractRelationEditorWidget *QgsRelationWidgetRegistry::create( const QString &widgetType, const QVariantMap &config, QWidget *parent ) const
63 {
64  if ( ! mRelationWidgetFactories.contains( widgetType ) )
65  return nullptr;
66 
67  return mRelationWidgetFactories.value( widgetType )->create( config, parent );
68 }
69 
70 QgsAbstractRelationEditorConfigWidget *QgsRelationWidgetRegistry::createConfigWidget( const QString &widgetType, const QgsRelation &relation, QWidget *parent ) const
71 {
72  if ( ! mRelationWidgetFactories.contains( widgetType ) )
73  return nullptr;
74 
75  return mRelationWidgetFactories.value( widgetType )->configWidget( relation, parent );
76 }
This class should be subclassed for every configurable relation widget type.
Factory class for creating relation widgets and their corresponding config widgets.
virtual QString type() const =0
Returns the machine readable identifier name of this widget type.
Base class to build new relation widgets.
Factory class for creating a relation editor widget and the respective config widget.
QMap< QString, QgsAbstractRelationEditorWidgetFactory * > factories() const
Gets access to all registered factories.
QStringList relationWidgetNames()
Returns a list of names of registered relation widgets.
void addRelationWidget(QgsAbstractRelationEditorWidgetFactory *widgetFactory)
Adds a new registered relation widgetFactory.
QgsAbstractRelationEditorConfigWidget * createConfigWidget(const QString &widgetType, const QgsRelation &relation, QWidget *parent=nullptr) const
Creates a configuration widget.
void removeRelationWidget(const QString &widgetType)
Removes a registered relation widget with given widgetType.
QgsAbstractRelationEditorWidget * create(const QString &widgetType, const QVariantMap &config, QWidget *parent=nullptr) const
Create a relation widget of a given type for a given field.