QGIS API Documentation  3.4.15-Madeira (e83d02e274)
qgsorganizetablecolumnsdialog.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  qgsorganizetablecolumnsdialog.cpp
3  -------------------
4  date : Feb 2016
5  copyright : Stéphane Brunner
6  email : [email protected]
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 <QMessageBox>
18 
20 #include "qgsattributetablemodel.h"
22 #include "qgsattributetableview.h"
23 #include "qgsdockwidget.h"
24 
25 #include "qgsapplication.h"
26 #include "qgsvectordataprovider.h"
27 #include "qgsvectorlayer.h"
28 #include "qgsexpression.h"
29 
30 #include "qgssearchquerybuilder.h"
31 #include "qgslogger.h"
32 #include "qgsmapcanvas.h"
33 #include "qgsproject.h"
35 #include "qgsmessagebar.h"
37 #include "qgsfeaturelistmodel.h"
38 #include "qgsrubberband.h"
39 #include "qgsfields.h"
41 
42 #include "qgsgui.h"
43 
44 
46  : QDialog( parent, flags )
47 {
48  setupUi( this );
50 
51  connect( mShowAllButton, &QAbstractButton::clicked, this, &QgsOrganizeTableColumnsDialog::showAll );
52  connect( mHideAllButton, &QAbstractButton::clicked, this, &QgsOrganizeTableColumnsDialog::hideAll );
53 
54  if ( vl )
55  {
56  mConfig = config;
57  mConfig.update( vl->fields() );
58 
59  mFieldsList->clear();
60 
61  Q_FOREACH ( const QgsAttributeTableConfig::ColumnConfig &columnConfig, mConfig.columns() )
62  {
63  QListWidgetItem *item = nullptr;
64  if ( columnConfig.type == QgsAttributeTableConfig::Action )
65  {
66  item = new QListWidgetItem( tr( "[Action Widget]" ), mFieldsList );
67  item->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "/propertyicons/action.svg" ) ) );
68  }
69  else
70  {
71  int idx = vl->fields().lookupField( columnConfig.name );
72  item = new QListWidgetItem( vl->attributeDisplayName( idx ), mFieldsList );
73 
74  switch ( vl->fields().fieldOrigin( idx ) )
75  {
77  item->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "/mIconExpression.svg" ) ) );
78  break;
79 
81  item->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "/propertyicons/join.svg" ) ) );
82  break;
83 
84  default:
85  item->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "/propertyicons/attributes.svg" ) ) );
86  break;
87  }
88  }
89 
90  item->setCheckState( columnConfig.hidden ? Qt::Unchecked : Qt::Checked );
91  item->setData( Qt::UserRole, QVariant::fromValue( columnConfig ) );
92  }
93  }
94 
95  if ( !vl || mConfig.columns().count() < 7 )
96  {
97  mShowAllButton->hide();
98  mHideAllButton->hide();
99  }
100 }
101 
102 QgsOrganizeTableColumnsDialog::QgsOrganizeTableColumnsDialog( const QgsVectorLayer *vl, QWidget *parent, Qt::WindowFlags flags )
103  : QgsOrganizeTableColumnsDialog( vl, vl->attributeTableConfig(), parent, flags )
104 {
105 }
106 
108 {
109  QVector<QgsAttributeTableConfig::ColumnConfig> columns;
110  columns.reserve( mFieldsList->count() );
111 
112  for ( int i = 0; i < mFieldsList->count() ; i++ )
113  {
114  const QListWidgetItem *item = mFieldsList->item( i );
115  QgsAttributeTableConfig::ColumnConfig columnConfig = item->data( Qt::UserRole ).value<QgsAttributeTableConfig::ColumnConfig>();
116 
117  columnConfig.hidden = item->checkState() == Qt::Unchecked;
118 
119  columns.append( columnConfig );
120  }
121 
123  config.setColumns( columns );
124  return config;
125 }
126 
128 {
129  for ( int i = 0; i < mFieldsList->count() ; i++ )
130  {
131  mFieldsList->item( i )->setCheckState( Qt::Checked );
132  }
133 }
134 
136 {
137  for ( int i = 0; i < mFieldsList->count() ; i++ )
138  {
139  mFieldsList->item( i )->setCheckState( Qt::Unchecked );
140  }
141 }
QgsAttributeTableConfig::Type type
The type of this column.
void update(const QgsFields &fields)
Update the configuration with the given fields.
Field comes from a joined layer (originIndex / 1000 = index of the join, originIndex % 1000 = index w...
Definition: qgsfields.h:50
QgsAttributeTableConfig config() const
Gets the updated configuration.
static QIcon getThemeIcon(const QString &name)
Helper to get a theme icon.
This column represents an action widget.
QgsFields fields() const FINAL
Returns the list of fields of this layer.
Dialog for organising (hiding and reordering) columns in the attributes table.
void hideAll()
hideAll unchecks all the fields to hide them all in the attribute table
QgsOrganizeTableColumnsDialog(const QgsVectorLayer *vl, QgsAttributeTableConfig config, QWidget *parent=nullptr, Qt::WindowFlags flags=Qt::Window)
Constructor.
bool hidden
Flag that controls if the column is hidden.
int lookupField(const QString &fieldName) const
Looks up field&#39;s index from the field name.
Definition: qgsfields.cpp:320
void showAll()
showAll checks all the fields to show them all in the attribute table
QString name
The name of the attribute if this column represents a field.
QString attributeDisplayName(int index) const
Convenience function that returns the attribute alias if defined or the field name else...
QVector< QgsAttributeTableConfig::ColumnConfig > columns() const
Gets the list with all columns and their configuration.
void setColumns(const QVector< QgsAttributeTableConfig::ColumnConfig > &columns)
Set the list of columns visible in the attribute table.
FieldOrigin fieldOrigin(int fieldIdx) const
Gets field&#39;s origin (value from an enumeration)
Definition: qgsfields.cpp:189
static void enableAutoGeometryRestore(QWidget *widget, const QString &key=QString())
Register the widget to allow its position to be automatically saved and restored when open and closed...
Definition: qgsgui.cpp:98
Defines the configuration of a column in the attribute table.
This is a container for configuration of the attribute table.
Represents a vector layer which manages a vector based data sets.
Field is calculated from an expression.
Definition: qgsfields.h:52