QGIS API Documentation  3.12.1-BucureČ™ti (121cc00ff0)
qgslayoutattributeselectiondialog.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgslayoutattributeselectiondialog.h
3  -----------------------------------
4  begin : November 2017
5  copyright : (C) 2017 by Nyall Dawson
6  email : nyall dot dawson at gmail dot com
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 
18 #ifndef QGSLAYOUTATTRIBUTESELECTIONDIALOG_H
19 #define QGSLAYOUTATTRIBUTESELECTIONDIALOG_H
20 
21 // We don't want to expose this in the public API
22 #define SIP_NO_FILE
23 
24 #include <QDialog>
25 #include <QMap>
26 #include <QSet>
27 #include <QItemDelegate>
28 #include <QAbstractTableModel>
29 #include <QSortFilterProxyModel>
30 #include "qgis_gui.h"
31 #include "qgis_sip.h"
32 #include "ui_qgslayoutattributeselectiondialogbase.h"
34 
35 class QGridLayout;
36 class QgsVectorLayer;
37 class QPushButton;
41 class QgsLayoutTableAvailableSortProxyModel;
42 class QgsLayoutObject;
44 
52 class GUI_EXPORT QgsLayoutAttributeTableColumnModel: public QAbstractTableModel
53 {
54  Q_OBJECT
55 
56  public:
57 
62  {
64  ShiftDown
65  };
66 
73 
74  int rowCount( const QModelIndex &parent = QModelIndex() ) const override;
75  int columnCount( const QModelIndex &parent = QModelIndex() ) const override;
76  QVariant data( const QModelIndex &index, int role ) const override;
77  QVariant headerData( int section, Qt::Orientation orientation, int role = Qt::DisplayRole ) const override;
78  bool setData( const QModelIndex &index, const QVariant &value, int role = Qt::EditRole ) override;
79  Qt::ItemFlags flags( const QModelIndex &index ) const override;
80  bool removeRows( int row, int count, const QModelIndex &parent = QModelIndex() ) override;
81  bool insertRows( int row, int count, const QModelIndex &parent = QModelIndex() ) override;
82  QModelIndex index( int row, int column, const QModelIndex &parent ) const override;
83  QModelIndex parent( const QModelIndex &child ) const override;
84 
92  bool moveRow( int row, ShiftDirection direction );
93 
98  void resetToLayer();
99 
104  QgsLayoutTableColumn *columnFromIndex( const QModelIndex &index ) const;
105 
110  QModelIndex indexFromColumn( QgsLayoutTableColumn *column );
111 
117  void setColumnAsSorted( QgsLayoutTableColumn *column, Qt::SortOrder order );
118 
124  void setColumnAsUnsorted( QgsLayoutTableColumn *column );
125 
130  bool moveColumnInSortRank( QgsLayoutTableColumn *column, ShiftDirection direction );
131 
132  private:
133  QgsLayoutItemAttributeTable *mTable = nullptr;
134 
135 };
136 
144 class GUI_EXPORT QgsLayoutTableSortColumnsProxyModel: public QSortFilterProxyModel
145 {
146  Q_OBJECT
147 
148  public:
149 
154  {
156  ShowUnsortedColumns
157  };
158 
166 
167  bool lessThan( const QModelIndex &left, const QModelIndex &right ) const override;
168  int columnCount( const QModelIndex &parent = QModelIndex() ) const override;
169  QVariant data( const QModelIndex &index, int role ) const override;
170  QVariant headerData( int section, Qt::Orientation orientation, int role = Qt::DisplayRole ) const override;
171  Qt::ItemFlags flags( const QModelIndex &index ) const override;
172  bool setData( const QModelIndex &index, const QVariant &value, int role = Qt::EditRole ) override;
173 
178  QgsLayoutTableColumn *columnFromRow( int row );
179 
185  QgsLayoutTableColumn *columnFromIndex( const QModelIndex &index ) const;
186 
193  QgsLayoutTableColumn *columnFromSourceIndex( const QModelIndex &sourceIndex ) const;
194 
198  void resetFilter();
199 
200  protected:
201  bool filterAcceptsRow( int source_row, const QModelIndex &source_parent ) const override;
202 
203  private:
204  QgsLayoutItemAttributeTable *mTable = nullptr;
205  ColumnFilterType mFilterType;
206 
210  QList<QgsLayoutTableColumn *> columnsWithoutSortRank() const;
211 
212 };
213 
221 class GUI_EXPORT QgsLayoutColumnAlignmentDelegate : public QItemDelegate
222 {
223  Q_OBJECT
224 
225  public:
227  explicit QgsLayoutColumnAlignmentDelegate( QObject *parent = nullptr );
228  QWidget *createEditor( QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index ) const override;
229  void setEditorData( QWidget *editor, const QModelIndex &index ) const override;
230  void setModelData( QWidget *editor, QAbstractItemModel *model, const QModelIndex &index ) const override;
231  void updateEditorGeometry( QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index ) const override;
232 
233 };
234 
242 class GUI_EXPORT QgsLayoutColumnSourceDelegate : public QItemDelegate, private QgsExpressionContextGenerator
243 {
244  Q_OBJECT
245 
246  public:
248  QgsLayoutColumnSourceDelegate( QgsVectorLayer *vlayer, QObject *parent = nullptr, const QgsLayoutObject *layoutObject = nullptr );
249  QWidget *createEditor( QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index ) const override;
250  void setEditorData( QWidget *editor, const QModelIndex &index ) const override;
251  void setModelData( QWidget *editor, QAbstractItemModel *model, const QModelIndex &index ) const override;
252  void updateEditorGeometry( QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index ) const override;
253  private slots:
254  void commitAndCloseEditor();
255  private:
256  QgsVectorLayer *mVectorLayer = nullptr;
257  const QgsLayoutObject *mLayoutObject = nullptr;
259 };
260 
268 class GUI_EXPORT QgsLayoutColumnWidthDelegate : public QItemDelegate
269 {
270  Q_OBJECT
271 
272  public:
274  explicit QgsLayoutColumnWidthDelegate( QObject *parent = nullptr );
275  QWidget *createEditor( QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index ) const override;
276  void setEditorData( QWidget *editor, const QModelIndex &index ) const override;
277  void setModelData( QWidget *editor, QAbstractItemModel *model, const QModelIndex &index ) const override;
278  void updateEditorGeometry( QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index ) const override;
279 
280 };
281 
289 class GUI_EXPORT QgsLayoutColumnSortOrderDelegate : public QItemDelegate
290 {
291  Q_OBJECT
292 
293  public:
295  explicit QgsLayoutColumnSortOrderDelegate( QObject *parent = nullptr );
296  QWidget *createEditor( QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index ) const override;
297  void setEditorData( QWidget *editor, const QModelIndex &index ) const override;
298  void setModelData( QWidget *editor, QAbstractItemModel *model, const QModelIndex &index ) const override;
299  void updateEditorGeometry( QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index ) const override;
300 
301 };
302 
303 
311 class GUI_EXPORT QgsLayoutAttributeSelectionDialog: public QDialog, private Ui::QgsLayoutAttributeSelectionDialogBase
312 {
313  Q_OBJECT
314  public:
316  QgsLayoutAttributeSelectionDialog( QgsLayoutItemAttributeTable *table, QgsVectorLayer *vLayer, QWidget *parent = nullptr, Qt::WindowFlags f = nullptr );
317 
318  private slots:
319  void mRemoveColumnPushButton_clicked();
320  void mAddColumnPushButton_clicked();
321  void mColumnUpPushButton_clicked();
322  void mColumnDownPushButton_clicked();
323  void mResetColumnsPushButton_clicked();
324  void mClearColumnsPushButton_clicked();
325  void mAddSortColumnPushButton_clicked();
326  void mRemoveSortColumnPushButton_clicked();
327  void mSortColumnUpPushButton_clicked();
328  void mSortColumnDownPushButton_clicked();
329  void showHelp();
330 
331  private:
332  QgsLayoutItemAttributeTable *mTable = nullptr;
333 
334  const QgsVectorLayer *mVectorLayer = nullptr;
335 
336  QgsLayoutAttributeTableColumnModel *mColumnModel = nullptr;
337 
338  QgsLayoutTableSortColumnsProxyModel *mSortedProxyModel = nullptr;
339 
340  QgsLayoutTableSortColumnsProxyModel *mAvailableSortProxyModel = nullptr;
341 
342  QgsLayoutColumnAlignmentDelegate *mColumnAlignmentDelegate = nullptr;
343  QgsLayoutColumnSourceDelegate *mColumnSourceDelegate = nullptr;
344  QgsLayoutColumnSortOrderDelegate *mColumnSortOrderDelegate = nullptr;
345  QgsLayoutColumnWidthDelegate *mColumnWidthDelegate = nullptr;
346 
347 };
348 
349 #endif // QGSLAYOUTATTRIBUTESELECTIONDIALOG_H
#define SIP_TRANSFERTHIS
Definition: qgis_sip.h:53
ColumnFilterType
Controls whether the proxy model shows sorted or unsorted columns.
A model for displaying columns shown in a QgsLayoutAttributeTable.
Stores properties of a column for a QgsLayoutTable.
A delegate for showing column alignment as a combo box.
A delegate for showing column attribute source as a QgsFieldExpressionWidget.
virtual QgsExpressionContext createExpressionContext() const =0
This method needs to be reimplemented in all classes which implement this interface and return an exp...
ShiftDirection
Controls whether a row/column is shifted up or down.
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
A layout table subclass that displays attributes from a vector layer.
Allows for filtering QgsComposerAttributeTable columns by columns which are sorted or unsorted...
A dialog to select what attributes to display (in the table item), set the column properties and spec...
Abstract interface for generating an expression context.
A delegate for showing column sort order as a combo box.
A delegate for showing column width as a spin box.
A base class for objects which belong to a layout.
Represents a vector layer which manages a vector based data sets.