QGIS API Documentation 3.99.0-Master (2fe06baccd8)
Loading...
Searching...
No Matches
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 "ui_qgslayoutattributeselectiondialogbase.h"
25
26#include "qgis_gui.h"
27#include "qgis_sip.h"
29
30#include <QAbstractTableModel>
31#include <QDialog>
32#include <QItemDelegate>
33#include <QMap>
34#include <QSet>
35#include <QSortFilterProxyModel>
36
37class QGridLayout;
38class QgsVectorLayer;
39class QPushButton;
43class QgsLayoutTableAvailableSortProxyModel;
44class QgsLayoutObject;
47
55class GUI_EXPORT QgsLayoutAttributeTableColumnModelBase : public QAbstractTableModel
56{
57 Q_OBJECT
58
59 public:
68
80
87
89 virtual QVector<QgsLayoutTableColumn> &columns() const = 0;
90
92 virtual QList<Column> displayedColumns() const = 0;
93
94 int rowCount( const QModelIndex &parent = QModelIndex() ) const override;
95 int columnCount( const QModelIndex &parent = QModelIndex() ) const override;
96 QVariant data( const QModelIndex &index, int role ) const override;
97 QVariant headerData( int section, Qt::Orientation orientation, int role = Qt::DisplayRole ) const override;
98 bool setData( const QModelIndex &index, const QVariant &value, int role = Qt::EditRole ) override;
99 Qt::ItemFlags flags( const QModelIndex &index ) const override;
100 bool removeRows( int row, int count, const QModelIndex &parent = QModelIndex() ) override;
101 bool insertRows( int row, int count, const QModelIndex &parent = QModelIndex() ) override;
102 QModelIndex index( int row, int column, const QModelIndex &parent ) const override;
103 QModelIndex parent( const QModelIndex &child ) const override;
104
112 bool moveRow( int row, ShiftDirection direction );
113
114 protected:
116};
117
126{
127 Q_OBJECT
128
129 public:
138
139 QVector<QgsLayoutTableColumn> &columns() const override;
140
141 QList<Column> displayedColumns() const override
142 {
143 return { Attribute, Heading, Alignment, Width };
144 }
145
150 void resetToLayer();
151};
152
161{
162 Q_OBJECT
163
164 public:
173
174 QVector<QgsLayoutTableColumn> &columns() const override;
175
176 QList<Column> displayedColumns() const override
177 {
178 return { Attribute, SortOrder };
179 }
180};
181
189class GUI_EXPORT QgsLayoutColumnAlignmentDelegate : public QItemDelegate
190{
191 Q_OBJECT
192
193 public:
195 explicit QgsLayoutColumnAlignmentDelegate( QObject *parent = nullptr );
196 QWidget *createEditor( QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index ) const override;
197 void setEditorData( QWidget *editor, const QModelIndex &index ) const override;
198 void setModelData( QWidget *editor, QAbstractItemModel *model, const QModelIndex &index ) const override;
199 void updateEditorGeometry( QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index ) const override;
200};
201
209class GUI_EXPORT QgsLayoutColumnSourceDelegate : public QItemDelegate, private QgsExpressionContextGenerator
210{
211 Q_OBJECT
212
213 public:
220 QgsLayoutColumnSourceDelegate( QgsVectorLayer *vlayer, QObject *parent = nullptr, const QgsLayoutObject *layoutObject = nullptr, bool forceExpressions = false );
221
222 QWidget *createEditor( QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index ) const override;
223 void setEditorData( QWidget *editor, const QModelIndex &index ) const override;
224 void setModelData( QWidget *editor, QAbstractItemModel *model, const QModelIndex &index ) const override;
225 void updateEditorGeometry( QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index ) const override;
226 private slots:
227 void commitAndCloseEditor();
228
229 private:
230 QgsVectorLayer *mVectorLayer = nullptr;
231 const QgsLayoutObject *mLayoutObject = nullptr;
232 bool mForceExpressions = false;
233 QgsExpressionContext createExpressionContext() const override;
234};
235
243class GUI_EXPORT QgsLayoutColumnWidthDelegate : public QItemDelegate
244{
245 Q_OBJECT
246
247 public:
249 explicit QgsLayoutColumnWidthDelegate( QObject *parent = nullptr );
250 QWidget *createEditor( QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index ) const override;
251 void setEditorData( QWidget *editor, const QModelIndex &index ) const override;
252 void setModelData( QWidget *editor, QAbstractItemModel *model, const QModelIndex &index ) const override;
253 void updateEditorGeometry( QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index ) const override;
254};
255
263class GUI_EXPORT QgsLayoutColumnSortOrderDelegate : public QItemDelegate
264{
265 Q_OBJECT
266
267 public:
269 explicit QgsLayoutColumnSortOrderDelegate( QObject *parent = nullptr );
270 QWidget *createEditor( QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index ) const override;
271 void setEditorData( QWidget *editor, const QModelIndex &index ) const override;
272 void setModelData( QWidget *editor, QAbstractItemModel *model, const QModelIndex &index ) const override;
273 void updateEditorGeometry( QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index ) const override;
274};
275
276
284class GUI_EXPORT QgsLayoutAttributeSelectionDialog : public QDialog, private Ui::QgsLayoutAttributeSelectionDialogBase
285{
286 Q_OBJECT
287 public:
289 QgsLayoutAttributeSelectionDialog( QgsLayoutItemAttributeTable *table, QgsVectorLayer *vLayer, QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags() );
290
291 private slots:
292 void mRemoveColumnPushButton_clicked();
293 void mAddColumnPushButton_clicked();
294 void mColumnUpPushButton_clicked();
295 void mColumnDownPushButton_clicked();
296 void mResetColumnsPushButton_clicked();
297 void mClearColumnsPushButton_clicked();
298 void mAddSortColumnPushButton_clicked();
299 void mRemoveSortColumnPushButton_clicked();
300 void mSortColumnUpPushButton_clicked();
301 void mSortColumnDownPushButton_clicked();
302 void showHelp();
303
304 private:
305 QgsLayoutItemAttributeTable *mTable = nullptr;
306
307 QgsLayoutAttributeTableColumnModel *mColumnModel = nullptr;
308 QgsLayoutColumnAlignmentDelegate *mColumnAlignmentDelegate = nullptr;
309 QgsLayoutColumnSourceDelegate *mColumnSourceDelegate = nullptr;
310 QgsLayoutColumnWidthDelegate *mColumnWidthDelegate = nullptr;
311
312 QgsLayoutTableSortModel *mSortColumnModel = nullptr;
313 QgsLayoutColumnSourceDelegate *mSortColumnSourceDelegate = nullptr;
314 QgsLayoutColumnSortOrderDelegate *mSortColumnOrderDelegate = nullptr;
315};
316
317#endif // QGSLAYOUTATTRIBUTESELECTIONDIALOG_H
Abstract interface for generating an expression context.
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
QgsLayoutAttributeSelectionDialog(QgsLayoutItemAttributeTable *table, QgsVectorLayer *vLayer, QWidget *parent=nullptr, Qt::WindowFlags f=Qt::WindowFlags())
constructor
A base model to hold the displaying or sorting columns used in a QgsLayoutAttributeTable.
QModelIndex index(int row, int column, const QModelIndex &parent) const override
Column
Available columns for the configuration table to be used by the model.
@ Attribute
Attribute for a field or an expression.
@ Alignment
Defines the alignment of the column.
bool removeRows(int row, int count, const QModelIndex &parent=QModelIndex()) override
bool moveRow(int row, ShiftDirection direction)
Moves the specified row up or down in the model.
QVariant headerData(int section, Qt::Orientation orientation, int role=Qt::DisplayRole) const override
virtual QVector< QgsLayoutTableColumn > & columns() const =0
To be reimplemented to provide the display or the sort columns.
QVariant data(const QModelIndex &index, int role) const override
QgsLayoutAttributeTableColumnModelBase(QgsLayoutItemAttributeTable *table, QObject *parent=nullptr)
Constructor for QgsLayoutAttributeTableColumnModel.
int columnCount(const QModelIndex &parent=QModelIndex()) const override
virtual QList< Column > displayedColumns() const =0
To be reimplemented to choose which column should be used by the model.
int rowCount(const QModelIndex &parent=QModelIndex()) const override
Qt::ItemFlags flags(const QModelIndex &index) const override
QModelIndex parent(const QModelIndex &child) const override
bool setData(const QModelIndex &index, const QVariant &value, int role=Qt::EditRole) override
ShiftDirection
Controls whether a row/column is shifted up or down.
bool insertRows(int row, int count, const QModelIndex &parent=QModelIndex()) override
A model for displaying columns shown in a QgsLayoutAttributeTable.
QList< Column > displayedColumns() const override
To be reimplemented to choose which column should be used by the model.
QgsLayoutAttributeTableColumnModel(QgsLayoutItemAttributeTable *table, QObject *parent=nullptr)
Constructor for QgsLayoutAttributeTableColumnModel.
A delegate for showing column alignment as a combo box.
void setEditorData(QWidget *editor, const QModelIndex &index) const override
void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const override
QgsLayoutColumnAlignmentDelegate(QObject *parent=nullptr)
constructor
QWidget * createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override
void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override
A delegate for showing column sort order as a combo box.
void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const override
void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override
void setEditorData(QWidget *editor, const QModelIndex &index) const override
QWidget * createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override
QgsLayoutColumnSortOrderDelegate(QObject *parent=nullptr)
constructor
A delegate for showing column attribute source as a QgsFieldExpressionWidget.
void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override
QgsLayoutColumnSourceDelegate(QgsVectorLayer *vlayer, QObject *parent=nullptr, const QgsLayoutObject *layoutObject=nullptr, bool forceExpressions=false)
Constructor for QgsLayoutColumnSourceDelegate.
void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const override
void setEditorData(QWidget *editor, const QModelIndex &index) const override
QWidget * createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override
A delegate for showing column width as a spin box.
void setEditorData(QWidget *editor, const QModelIndex &index) const override
QgsLayoutColumnWidthDelegate(QObject *parent=nullptr)
constructor
QWidget * createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override
void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override
void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const override
A layout table subclass that displays attributes from a vector layer.
A base class for objects which belong to a layout.
Stores properties of a column for a QgsLayoutTable.
Allows for filtering QgsComposerAttributeTable columns by columns which are sorted or unsorted.
QgsLayoutTableSortModel(QgsLayoutItemAttributeTable *table, QObject *parent=nullptr)
Constructor for QgsLayoutTableSortColumnsProxyModel.
QList< Column > displayedColumns() const override
To be reimplemented to choose which column should be used by the model.
Represents a vector layer which manages a vector based dataset.
#define SIP_TRANSFERTHIS
Definition qgis_sip.h:53