QGIS API Documentation  3.10.0-A Coruña (6c816b4204)
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 
45 QgsOrganizeTableColumnsDialog::QgsOrganizeTableColumnsDialog( const QgsVectorLayer *vl, const QgsAttributeTableConfig &config, QWidget *parent, Qt::WindowFlags flags )
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  const auto constColumns = mConfig.columns();
62  for ( const QgsAttributeTableConfig::ColumnConfig &columnConfig : constColumns )
63  {
64  QListWidgetItem *item = nullptr;
65  if ( columnConfig.type == QgsAttributeTableConfig::Action )
66  {
67  item = new QListWidgetItem( tr( "[Action Widget]" ), mFieldsList );
68  item->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "/propertyicons/action.svg" ) ) );
69  }
70  else
71  {
72  int idx = vl->fields().lookupField( columnConfig.name );
73  item = new QListWidgetItem( vl->attributeDisplayName( idx ), mFieldsList );
74 
75  switch ( vl->fields().fieldOrigin( idx ) )
76  {
78  item->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "/mIconExpression.svg" ) ) );
79  break;
80 
82  item->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "/propertyicons/join.svg" ) ) );
83  break;
84 
85  default:
86  item->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "/propertyicons/attributes.svg" ) ) );
87  break;
88  }
89  }
90 
91  item->setCheckState( columnConfig.hidden ? Qt::Unchecked : Qt::Checked );
92  item->setData( Qt::UserRole, QVariant::fromValue( columnConfig ) );
93  }
94  }
95 
96  if ( !vl || mConfig.columns().count() < 7 )
97  {
98  mShowAllButton->hide();
99  mHideAllButton->hide();
100  }
101 }
102 
104 QgsOrganizeTableColumnsDialog::QgsOrganizeTableColumnsDialog( const QgsVectorLayer *vl, QWidget *parent, Qt::WindowFlags flags )
105  : QgsOrganizeTableColumnsDialog( vl, vl->attributeTableConfig(), parent, flags )
106 {
107 }
109 
111 {
112  QVector<QgsAttributeTableConfig::ColumnConfig> columns;
113  columns.reserve( mFieldsList->count() );
114 
115  for ( int i = 0; i < mFieldsList->count() ; i++ )
116  {
117  const QListWidgetItem *item = mFieldsList->item( i );
118  QgsAttributeTableConfig::ColumnConfig columnConfig = item->data( Qt::UserRole ).value<QgsAttributeTableConfig::ColumnConfig>();
119 
120  columnConfig.hidden = item->checkState() == Qt::Unchecked;
121 
122  columns.append( columnConfig );
123  }
124 
126  config.setColumns( columns );
127  return config;
128 }
129 
131 {
132  for ( int i = 0; i < mFieldsList->count() ; i++ )
133  {
134  mFieldsList->item( i )->setCheckState( Qt::Checked );
135  }
136 }
137 
139 {
140  for ( int i = 0; i < mFieldsList->count() ; i++ )
141  {
142  mFieldsList->item( i )->setCheckState( Qt::Unchecked );
143  }
144 }
int lookupField(const QString &fieldName) const
Looks up field&#39;s index from the field name.
Definition: qgsfields.cpp:324
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
FieldOrigin fieldOrigin(int fieldIdx) const
Gets field&#39;s origin (value from an enumeration)
Definition: qgsfields.cpp:189
QgsAttributeTableConfig config() const
Gets the updated configuration.
QgsOrganizeTableColumnsDialog(const QgsVectorLayer *vl, const QgsAttributeTableConfig &config, QWidget *parent=nullptr, Qt::WindowFlags flags=Qt::Window)
Constructor.
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.
void hideAll()
hideAll unchecks all the fields to hide them all in the attribute table
bool hidden
Flag that controls if the column is hidden.
void showAll()
showAll checks all the fields to show them all in the attribute table
QVector< QgsAttributeTableConfig::ColumnConfig > columns() const
Gets the list with all columns and their configuration.
QgsAttributeTableConfig attributeTableConfig() const
Returns the attribute table configuration object.
void setColumns(const QVector< QgsAttributeTableConfig::ColumnConfig > &columns)
Set the list of columns visible in the attribute table.
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:127
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
QString attributeDisplayName(int index) const
Convenience function that returns the attribute alias if defined or the field name else...