Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsattributetableconfig.h - QgsAttributeTableConfig 3 : : 4 : : --------------------- 5 : : begin : 27.4.2016 6 : : copyright : (C) 2016 by Matthias Kuhn 7 : : email : matthias@opengis.ch 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 : : #ifndef QGSATTRIBUTETABLECONFIG_H 17 : : #define QGSATTRIBUTETABLECONFIG_H 18 : : 19 : : #include <QString> 20 : : #include <QVector> 21 : : #include <QDomNode> 22 : : #include <QVariant> 23 : : 24 : : #include "qgis_sip.h" 25 : : #include "qgis_core.h" 26 : : 27 : : class QgsFields; 28 : : 29 : : /** 30 : : * \ingroup core 31 : : * \brief This is a container for configuration of the attribute table. 32 : : * The configuration is specific for one vector layer. 33 : : * \since QGIS 2.16 34 : : */ 35 : : 36 : 62 : class CORE_EXPORT QgsAttributeTableConfig 37 : : { 38 : : public: 39 : : 40 : : /** 41 : : * The type of an attribute table column. 42 : : */ 43 : : enum Type 44 : : { 45 : : Field, //!< This column represents a field 46 : : Action //!< This column represents an action widget 47 : : }; 48 : : 49 : : /** 50 : : * Defines the configuration of a column in the attribute table. 51 : : */ 52 : 0 : struct ColumnConfig 53 : : { 54 : : //! Constructor for ColumnConfig 55 : 0 : ColumnConfig() = default; 56 : : 57 : : bool operator== ( const QgsAttributeTableConfig::ColumnConfig &other ) const SIP_SKIP; 58 : : 59 : 0 : QgsAttributeTableConfig::Type type = Field; //!< The type of this column. 60 : : QString name; //!< The name of the attribute if this column represents a field 61 : 0 : bool hidden = false; //!< Flag that controls if the column is hidden 62 : 0 : int width = -1; //!< Width of column, or -1 for default width 63 : : }; 64 : : 65 : : /** 66 : : * The style of the action widget in the attribute table. 67 : : */ 68 : : enum ActionWidgetStyle 69 : : { 70 : : ButtonList, //!< A list of buttons 71 : : DropDown //!< A tool button with a drop-down to select the current action 72 : : }; 73 : : 74 : : /** 75 : : * Constructor for QgsAttributeTableConfig. 76 : : */ 77 : 78 : QgsAttributeTableConfig() = default; 78 : : 79 : : /** 80 : : * Gets the list with all columns and their configuration. 81 : : * The list order defines the order of appearance. 82 : : */ 83 : : QVector<QgsAttributeTableConfig::ColumnConfig> columns() const; 84 : : 85 : : /** 86 : : * Returns TRUE if the configuration is empty, ie it contains no columns. 87 : : */ 88 : : bool isEmpty() const; 89 : : 90 : : /** 91 : : * Maps a visible column index to its original column index. 92 : : * \param visibleColumn index of visible column 93 : : * \returns corresponding index when hidden columns are considered 94 : : */ 95 : : int mapVisibleColumnToIndex( int visibleColumn ) const; 96 : : 97 : : /** 98 : : * Set the list of columns visible in the attribute table. 99 : : * The list order defines the order of appearance. 100 : : */ 101 : : void setColumns( const QVector<QgsAttributeTableConfig::ColumnConfig> &columns ); 102 : : 103 : : /** 104 : : * Update the configuration with the given fields. 105 : : * Any field which is present in the configuration but not present in the 106 : : * parameter fields will be removed. Any field which is in the parameter 107 : : * fields but not in the configuration will be appended. 108 : : */ 109 : : void update( const QgsFields &fields ); 110 : : 111 : : /** 112 : : * Returns TRUE if the action widget is visible 113 : : */ 114 : : bool actionWidgetVisible() const; 115 : : 116 : : /** 117 : : * Set if the action widget is visible 118 : : */ 119 : : void setActionWidgetVisible( bool visible ); 120 : : 121 : : /** 122 : : * Gets the style of the action widget 123 : : */ 124 : : ActionWidgetStyle actionWidgetStyle() const; 125 : : 126 : : /** 127 : : * Set the style of the action widget 128 : : */ 129 : : void setActionWidgetStyle( ActionWidgetStyle actionWidgetStyle ); 130 : : 131 : : /** 132 : : * Serialize to XML on layer save 133 : : */ 134 : : void writeXml( QDomNode &node ) const; 135 : : 136 : : /** 137 : : * Deserialize to XML on layer load 138 : : */ 139 : : void readXml( const QDomNode &node ); 140 : : 141 : : /** 142 : : * Gets the expression used for sorting. 143 : : */ 144 : : QString sortExpression() const; 145 : : 146 : : /** 147 : : * Set the sort expression used for sorting. 148 : : */ 149 : : void setSortExpression( const QString &sortExpression ); 150 : : 151 : : /** 152 : : * Returns the width of a column, or -1 if column should use default width. 153 : : * \param column column index 154 : : * \see setColumnWidth() 155 : : */ 156 : : int columnWidth( int column ) const; 157 : : 158 : : /** 159 : : * Sets the width of a column. 160 : : * \param column column index 161 : : * \param width column width in pixels, or -1 if column should use default width 162 : : * \see columnWidth() 163 : : */ 164 : : void setColumnWidth( int column, int width ); 165 : : 166 : : /** 167 : : * Returns TRUE if the specified column is hidden. 168 : : * \param column column index 169 : : * \see setColumnHidden() 170 : : */ 171 : : bool columnHidden( int column ) const; 172 : : 173 : : /** 174 : : * Sets whether the specified column should be hidden. 175 : : * \param column column index 176 : : * \param hidden set to TRUE to hide column 177 : : * \see columnHidden() 178 : : */ 179 : : void setColumnHidden( int column, bool hidden ); 180 : : 181 : : /** 182 : : * Gets the sort order 183 : : * \since QGIS 2.16 184 : : */ 185 : : Qt::SortOrder sortOrder() const; 186 : : 187 : : /** 188 : : * Set the sort order 189 : : * \since QGIS 2.16 190 : : */ 191 : : void setSortOrder( Qt::SortOrder sortOrder ); 192 : : 193 : : /** 194 : : * Compare this configuration's columns name, type, and order to \a other. 195 : : * The column's width is not considered. 196 : : */ 197 : : bool hasSameColumns( const QgsAttributeTableConfig &other ) const; 198 : : 199 : : /** 200 : : * Compare this configuration to other. 201 : : */ 202 : : bool operator!= ( const QgsAttributeTableConfig &other ) const; 203 : : 204 : : private: 205 : : QVector<ColumnConfig> mColumns; 206 : 78 : ActionWidgetStyle mActionWidgetStyle = DropDown; 207 : : QString mSortExpression; 208 : 78 : Qt::SortOrder mSortOrder = Qt::AscendingOrder; 209 : : }; 210 : : 211 : : Q_DECLARE_METATYPE( QgsAttributeTableConfig::ColumnConfig ) 212 : : 213 : : #endif // QGSATTRIBUTETABLECONFIG_H