QGIS API Documentation 3.41.0-Master (57ec4277f5e)
Loading...
Searching...
No Matches
qgspointcloudattributecombobox.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgspointcloudattributecombobox.cpp
3 --------------------------------------
4 begin : November 2020
5 copyright : (C) 2020 by Nyall Dawson
6 email : nyall dot dawson at gmail dot com
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
17#include "moc_qgspointcloudattributecombobox.cpp"
18#include "qgsfieldproxymodel.h"
19#include "qgsmaplayer.h"
20#include "qgspointcloudlayer.h"
21
23 : QComboBox( parent )
24{
25 mAttributeModel = new QgsPointCloudAttributeModel( this );
26 mProxyModel = new QgsPointCloudAttributeProxyModel( mAttributeModel, this );
27 setModel( mProxyModel );
28
29 connect( this, static_cast<void ( QComboBox::* )( int )>( &QComboBox::activated ), this, &QgsPointCloudAttributeComboBox::indexChanged );
30}
31
36
38{
39 mAttributeModel->setAllowEmptyAttributeName( allowEmpty );
40}
41
46
48{
49 if ( !layer )
50 {
51 setCurrentIndex( -1 );
52 mAttributeModel->setLayer( nullptr );
53 return;
54 }
55
56 QgsPointCloudLayer *pcl = qobject_cast<QgsPointCloudLayer *>( layer );
57 mAttributeModel->setLayer( pcl );
58}
59
61{
62 return mAttributeModel->layer();
63}
64
69
74
76{
77 const QString prevAttribute = currentAttribute();
78 const QModelIndex idx = mAttributeModel->indexFromName( name );
79 if ( idx.isValid() )
80 {
81 const QModelIndex proxyIdx = mProxyModel->mapFromSource( idx );
82 if ( proxyIdx.isValid() )
83 {
84 setCurrentIndex( proxyIdx.row() );
85 }
86 else
87 {
88 setCurrentIndex( -1 );
89 }
90 }
91 else
92 {
93 setCurrentIndex( -1 );
94 }
95
96 if ( prevAttribute != currentAttribute() )
98}
99
101{
102 const int i = currentIndex();
103
104 const QModelIndex proxyIndex = mProxyModel->index( i, 0 );
105 if ( !proxyIndex.isValid() )
106 {
107 return QString();
108 }
109
110 return mProxyModel->data( proxyIndex, static_cast<int>( QgsPointCloudAttributeModel::CustomRole::AttributeName ) ).toString();
111}
112
113void QgsPointCloudAttributeComboBox::indexChanged( int i )
114{
115 Q_UNUSED( i )
116 const QString name = currentAttribute();
117 emit attributeChanged( name );
118}
Base class for all map layer types.
Definition qgsmaplayer.h:76
Collection of point cloud attributes.
void setLayer(QgsMapLayer *layer)
Sets the layer for which fields are listed in the combobox.
void setAttributes(const QgsPointCloudAttributeCollection &attributes)
Manually sets the attributes to use for the combo box.
QgsPointCloudAttributeProxyModel::Filters filters
void setAllowEmptyAttributeName(bool allowEmpty)
Sets whether an optional empty attribute ("not set") option is shown in the combo box.
QgsPointCloudAttributeCollection attributes() const
Returns the attributes currently shown in the combobox.
void attributeChanged(const QString &name)
Emitted when the currently selected attribute changes.
QgsPointCloudAttributeComboBox(QWidget *parent=nullptr)
QgsPointCloudAttributeComboBox creates a combo box to display the fields of a layer.
QgsPointCloudLayer * layer() const
Returns the layer currently associated with the combobox.
QString currentAttribute() const
Returns the currently selected attribute.
void setAttribute(const QString &name)
Sets the currently selected attribute by name.
void setFilters(QgsPointCloudAttributeProxyModel::Filters filters)
Sets filters to allow filtering available attributes according to the attribute properties.
A model for display of available attributes from a point cloud.
QgsPointCloudAttributeCollection attributes() const
Returns the attributes associated with the model.
void setAllowEmptyAttributeName(bool allowEmpty)
Sets whether an optional empty attribute ("not set") option is present in the model.
void setLayer(QgsPointCloudLayer *layer)
Sets the layer associated with the model.
void setAttributes(const QgsPointCloudAttributeCollection &attributes)
Sets the attributes to include in the model.
QModelIndex indexFromName(const QString &name)
Returns the index corresponding to a given attribute name.
QgsPointCloudLayer * layer()
Returns the layer associated with the model.
bool allowEmptyAttributeName() const
Returns true if the model allows the empty attribute ("not set") choice.
A proxy model for filtering available attributes from a point cloud attribute model.
QgsPointCloudAttributeProxyModel * setFilters(QgsPointCloudAttributeProxyModel::Filters filters)
Set flags that affect how fields are filtered in the model.
Represents a map layer supporting display of point clouds.