26
26
#include "QStandardItem"
27
27
#include "QSortFilterProxyModel"
29
/** An expression item that can be used in the QgsExpressionBuilderWidget tree.
31
class QgsExpressionItem : public QStandardItem
41
QgsExpressionItem( QString label,
42
QString expressionText,
44
QgsExpressionItem::ItemType itemType = ExpressionNode )
45
: QStandardItem( label )
47
mExpressionText = expressionText;
50
setData( itemType, ItemTypeRole );
53
QgsExpressionItem( QString label,
54
QString expressionText,
55
QgsExpressionItem::ItemType itemType = ExpressionNode )
56
: QStandardItem( label )
58
mExpressionText = expressionText;
60
setData( itemType, ItemTypeRole );
63
QString getExpressionText() const { return mExpressionText; }
65
/** Get the help text that is associated with this expression item.
67
* @return The help text.
69
QString getHelpText() const { return mHelpText; }
70
/** Set the help text for the current item
72
* @note The help text can be set as a html string.
74
void setHelpText( QString helpText ) { mHelpText = helpText; }
76
/** Get the type of expression item eg header, field, ExpressionNode.
78
* @return The QgsExpressionItem::ItemType
80
QgsExpressionItem::ItemType getItemType() const { return mType; }
82
//! Custom sort order role
83
static const int CustomSortRole = Qt::UserRole + 1;
85
static const int ItemTypeRole = Qt::UserRole + 2;
88
QString mExpressionText;
90
QgsExpressionItem::ItemType mType;
29
94
/** Search proxy used to filter the QgsExpressionBuilderWidget tree.
30
95
* The default search for a tree model only searches top level this will handle one
41
106
bool filterAcceptsRow( int source_row, const QModelIndex &source_parent ) const override
43
if ( source_parent == qobject_cast<QStandardItemModel*>( sourceModel() )->invisibleRootItem()->index() )
108
QModelIndex index = sourceModel()->index( source_row, 0, source_parent );
109
QgsExpressionItem::ItemType itemType = QgsExpressionItem::ItemType( sourceModel()->data( index, QgsExpressionItem::ItemTypeRole ).toInt() );
111
if ( itemType == QgsExpressionItem::Header )
46
114
return QSortFilterProxyModel::filterAcceptsRow( source_row, source_parent );
51
119
bool lessThan( const QModelIndex &left, const QModelIndex &right ) const override
53
int leftSort = sourceModel()->data( left, Qt::UserRole + 1 ).toInt();
54
int rightSort = sourceModel()->data( right, Qt::UserRole + 1 ).toInt();
121
int leftSort = sourceModel()->data( left, QgsExpressionItem::CustomSortRole ).toInt();
122
int rightSort = sourceModel()->data( right, QgsExpressionItem::CustomSortRole ).toInt();
55
123
if ( leftSort != rightSort )
56
124
return leftSort < rightSort;
71
/** An expression item that can be used in the QgsExpressionBuilderWidget tree.
73
class QgsExpressionItem : public QStandardItem
83
QgsExpressionItem( QString label,
84
QString expressionText,
86
QgsExpressionItem::ItemType itemType = ExpressionNode )
87
: QStandardItem( label )
89
mExpressionText = expressionText;
94
QgsExpressionItem( QString label,
95
QString expressionText,
96
QgsExpressionItem::ItemType itemType = ExpressionNode )
97
: QStandardItem( label )
99
mExpressionText = expressionText;
103
QString getExpressionText() { return mExpressionText; }
105
/** Get the help text that is associated with this expression item.
107
* @return The help text.
109
QString getHelpText() { return mHelpText; }
110
/** Set the help text for the current item
112
* @note The help text can be set as a html string.
114
void setHelpText( QString helpText ) { mHelpText = helpText; }
116
/** Get the type of expression item eg header, field, ExpressionNode.
118
* @return The QgsExpressionItem::ItemType
120
QgsExpressionItem::ItemType getItemType() { return mType; }
123
QString mExpressionText;
125
QgsExpressionItem::ItemType mType;
128
139
/** A reusable widget that can be used to build a expression string.
129
140
* See QgsExpressionBuilderDialog for exmaple of usage.