QGIS API Documentation
4.3.0-Master (16eddb2670e)
Toggle main menu visibility
Loading...
Searching...
No Matches
src
gui
editorwidgets
qgsrelationreferencefactory.cpp
Go to the documentation of this file.
1
/***************************************************************************
2
qgsrelationreferencefactory.cpp
3
--------------------------------------
4
Date : 29.5.2013
5
Copyright : (C) 2013 Matthias Kuhn
6
Email : matthias at opengis dot ch
7
***************************************************************************
8
* *
9
* This program is free software; you can redistribute it and/or modify *
10
* it under the terms of the GNU General Public License as published by *
11
* the Free Software Foundation; either version 2 of the License, or *
12
* (at your option) any later version. *
13
* *
14
***************************************************************************/
15
16
#include "
qgsrelationreferencefactory.h
"
17
18
#include "
qgsproject.h
"
19
#include "
qgsrelation.h
"
20
#include "
qgsrelationreferenceconfigdlg.h
"
21
#include "
qgsrelationreferencesearchwidgetwrapper.h
"
22
#include "
qgsrelationreferencewidget.h
"
23
#include "
qgsrelationreferencewidgetwrapper.h
"
24
25
QgsRelationReferenceFactory::QgsRelationReferenceFactory
(
const
QString &
name
,
QgsMapCanvas
*canvas,
QgsMessageBar
*messageBar,
const
QIcon &
icon
)
26
:
QgsEditorWidgetFactory
(
name
,
icon
)
27
, mCanvas( canvas )
28
, mMessageBar( messageBar )
29
{}
30
31
QgsEditorWidgetWrapper
*
QgsRelationReferenceFactory::create
(
QgsVectorLayer
*vl,
int
fieldIdx, QWidget *editor, QWidget *parent )
const
32
{
33
return
new
QgsRelationReferenceWidgetWrapper
( vl, fieldIdx, editor, mCanvas, mMessageBar, parent );
34
}
35
36
QgsSearchWidgetWrapper
*
QgsRelationReferenceFactory::createSearchWidget
(
QgsVectorLayer
*vl,
int
fieldIdx, QWidget *parent )
const
37
{
38
return
new
QgsRelationReferenceSearchWidgetWrapper
( vl, fieldIdx, mCanvas, parent );
39
}
40
41
QgsEditorConfigWidget
*
QgsRelationReferenceFactory::configWidget
(
QgsVectorLayer
*vl,
int
fieldIdx, QWidget *parent )
const
42
{
43
return
new
QgsRelationReferenceConfigDlg
( vl, fieldIdx, parent );
44
}
45
46
QHash<const char *, int>
QgsRelationReferenceFactory::supportedWidgetTypes
()
47
{
48
QHash<const char *, int> map = QHash<const char *, int>();
49
map.insert( QgsRelationReferenceWidget::staticMetaObject.className(), 10 );
50
return
map;
51
}
52
53
unsigned
int
QgsRelationReferenceFactory::fieldScore
(
const
QgsVectorLayer
*vl,
int
fieldIdx )
const
54
{
55
bool
isFirstFieldInRelation =
false
;
56
const
QList<QgsRelation> relations = vl->
referencingRelations
( fieldIdx );
57
for
(
const
QgsRelation
&rel : relations )
58
{
59
switch
( rel.type() )
60
{
61
case
Qgis::RelationshipType::Normal
:
62
{
63
// For composite foreign keys, only the first referencing field should
64
// get a RelationReference widget. The other fields are managed by the
65
// widget internally and should not show a separate RelationReference
66
// widget (see https://github.com/qgis/QGIS/issues/32048).
67
const
QList<QgsRelation::FieldPair> fieldPairs = rel.fieldPairs();
68
if
( !fieldPairs.isEmpty() )
69
{
70
const
int
firstReferencingFieldIdx = vl->
fields
().
lookupField
( fieldPairs.at( 0 ).referencingField() );
71
if
( firstReferencingFieldIdx == fieldIdx )
72
{
73
isFirstFieldInRelation =
true
;
74
}
75
}
76
break
;
77
}
78
79
case
Qgis::RelationshipType::Generated
:
80
break
;
81
}
82
}
83
// generated relations should not be used for relation reference widget
84
// For composite foreign keys, only the first field gets the RelationReference widget
85
return
isFirstFieldInRelation ? 21
/*A bit stronger than the range widget*/
: 5;
86
}
Qgis::RelationshipType::Generated
@ Generated
A generated relation is a child of a polymorphic relation.
Definition
qgis.h:4893
Qgis::RelationshipType::Normal
@ Normal
A normal relation.
Definition
qgis.h:4892
QgsEditorConfigWidget
Base class for widgets which configure editor widget types.
Definition
qgseditorconfigwidget.h:41
QgsEditorWidgetFactory::QgsEditorWidgetFactory
QgsEditorWidgetFactory(const QString &name, const QIcon &icon=QIcon())
Constructor.
Definition
qgseditorwidgetfactory.cpp:27
QgsEditorWidgetFactory::icon
QIcon icon() const
Returns the icon of this widget type.
Definition
qgseditorwidgetfactory.cpp:46
QgsEditorWidgetFactory::name
QString name() const
Returns the human readable identifier name of this widget type.
Definition
qgseditorwidgetfactory.cpp:41
QgsEditorWidgetWrapper
Manages an editor widget.
Definition
qgseditorwidgetwrapper.h:50
QgsFields::lookupField
Q_INVOKABLE int lookupField(const QString &fieldName) const
Looks up field's index from the field name.
Definition
qgsfields.cpp:410
QgsMapCanvas
Map canvas is a class for displaying all GIS data types on a canvas.
Definition
qgsmapcanvas.h:96
QgsMessageBar
A bar for displaying non-blocking messages to the user.
Definition
qgsmessagebar.h:61
QgsRelationReferenceConfigDlg
Configuration widget for relation reference widgets.
Definition
qgsrelationreferenceconfigdlg.h:37
QgsRelationReferenceFactory::configWidget
QgsEditorConfigWidget * configWidget(QgsVectorLayer *vl, int fieldIdx, QWidget *parent) const override
Override this in your implementation.
Definition
qgsrelationreferencefactory.cpp:41
QgsRelationReferenceFactory::QgsRelationReferenceFactory
QgsRelationReferenceFactory(const QString &name, QgsMapCanvas *canvas, QgsMessageBar *messageBar, const QIcon &icon=QIcon())
Constructor for QgsRelationReferenceFactory, where name is a human-readable name for the factory and ...
Definition
qgsrelationreferencefactory.cpp:25
QgsRelationReferenceFactory::create
QgsEditorWidgetWrapper * create(QgsVectorLayer *vl, int fieldIdx, QWidget *editor, QWidget *parent) const override
Override this in your implementation.
Definition
qgsrelationreferencefactory.cpp:31
QgsRelationReferenceFactory::createSearchWidget
QgsSearchWidgetWrapper * createSearchWidget(QgsVectorLayer *vl, int fieldIdx, QWidget *parent) const override
By default a simple QgsFilterLineEdit is returned as search widget.
Definition
qgsrelationreferencefactory.cpp:36
QgsRelationReferenceFactory::fieldScore
unsigned int fieldScore(const QgsVectorLayer *vl, int fieldIdx) const override
This method allows disabling this editor widget type for a certain field.
Definition
qgsrelationreferencefactory.cpp:53
QgsRelationReferenceFactory::supportedWidgetTypes
QHash< const char *, int > supportedWidgetTypes() override
Returns a list of widget types which this editor widget supports.
Definition
qgsrelationreferencefactory.cpp:46
QgsRelationReferenceSearchWidgetWrapper
Wraps a relation reference search widget.
Definition
qgsrelationreferencesearchwidgetwrapper.h:38
QgsRelationReferenceWidgetWrapper
Wraps a relation reference widget.
Definition
qgsrelationreferencewidgetwrapper.h:42
QgsRelation
Represents a relationship between two vector layers.
Definition
qgsrelation.h:42
QgsSearchWidgetWrapper
Shows a search widget on a filter form.
Definition
qgssearchwidgetwrapper.h:45
QgsVectorLayer
Represents a vector layer which manages a vector based dataset.
Definition
qgsvectorlayer.h:414
QgsVectorLayer::referencingRelations
QList< QgsRelation > referencingRelations(int idx) const
Returns the layer's relations, where the foreign key is on this layer.
Definition
qgsvectorlayer.cpp:6361
QgsVectorLayer::fields
QgsFields fields
Definition
qgsvectorlayer.h:422
qgsproject.h
qgsrelation.h
qgsrelationreferenceconfigdlg.h
qgsrelationreferencefactory.h
qgsrelationreferencesearchwidgetwrapper.h
qgsrelationreferencewidget.h
qgsrelationreferencewidgetwrapper.h
Generated on
for QGIS API Documentation by
1.17.0