~grass/qgis/qgis-git-trunk

« back to all changes in this revision

Viewing changes to src/gui/qgsexpressionbuilderwidget.h

  • Committer: Nyall Dawson
  • Date: 2015-08-22 09:01:43 UTC
  • Revision ID: git-v1:d7b74748c85cb05613fb6a73a6d8c6612c4bd96c
Fix filtering of highlighted variables

Show diffs side-by-side

added added

removed removed

Lines of Context:
26
26
#include "QStandardItem"
27
27
#include "QSortFilterProxyModel"
28
28
 
 
29
/** An expression item that can be used in the QgsExpressionBuilderWidget tree.
 
30
  */
 
31
class QgsExpressionItem : public QStandardItem
 
32
{
 
33
  public:
 
34
    enum ItemType
 
35
    {
 
36
      Header,
 
37
      Field,
 
38
      ExpressionNode
 
39
    };
 
40
 
 
41
    QgsExpressionItem( QString label,
 
42
                       QString expressionText,
 
43
                       QString helpText,
 
44
                       QgsExpressionItem::ItemType itemType = ExpressionNode )
 
45
        : QStandardItem( label )
 
46
    {
 
47
      mExpressionText = expressionText;
 
48
      mHelpText = helpText;
 
49
      mType = itemType;
 
50
      setData( itemType, ItemTypeRole );
 
51
    }
 
52
 
 
53
    QgsExpressionItem( QString label,
 
54
                       QString expressionText,
 
55
                       QgsExpressionItem::ItemType itemType = ExpressionNode )
 
56
        : QStandardItem( label )
 
57
    {
 
58
      mExpressionText = expressionText;
 
59
      mType = itemType;
 
60
      setData( itemType, ItemTypeRole );
 
61
    }
 
62
 
 
63
    QString getExpressionText() const { return mExpressionText; }
 
64
 
 
65
    /** Get the help text that is associated with this expression item.
 
66
      *
 
67
      * @return The help text.
 
68
      */
 
69
    QString getHelpText() const { return mHelpText; }
 
70
    /** Set the help text for the current item
 
71
      *
 
72
      * @note The help text can be set as a html string.
 
73
      */
 
74
    void setHelpText( QString helpText ) { mHelpText = helpText; }
 
75
 
 
76
    /** Get the type of expression item eg header, field, ExpressionNode.
 
77
      *
 
78
      * @return The QgsExpressionItem::ItemType
 
79
      */
 
80
    QgsExpressionItem::ItemType getItemType() const { return mType; }
 
81
 
 
82
    //! Custom sort order role
 
83
    static const int CustomSortRole = Qt::UserRole + 1;
 
84
    //! Item type role
 
85
    static const int ItemTypeRole = Qt::UserRole + 2;
 
86
 
 
87
  private:
 
88
    QString mExpressionText;
 
89
    QString mHelpText;
 
90
    QgsExpressionItem::ItemType mType;
 
91
 
 
92
};
 
93
 
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
31
96
  * level down
40
105
 
41
106
    bool filterAcceptsRow( int source_row, const QModelIndex &source_parent ) const override
42
107
    {
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() );
 
110
 
 
111
      if ( itemType == QgsExpressionItem::Header )
44
112
        return true;
45
113
 
46
114
      return QSortFilterProxyModel::filterAcceptsRow( source_row, source_parent );
50
118
 
51
119
    bool lessThan( const QModelIndex &left, const QModelIndex &right ) const override
52
120
    {
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;
57
125
 
68
136
    }
69
137
};
70
138
 
71
 
/** An expression item that can be used in the QgsExpressionBuilderWidget tree.
72
 
  */
73
 
class QgsExpressionItem : public QStandardItem
74
 
{
75
 
  public:
76
 
    enum ItemType
77
 
    {
78
 
      Header,
79
 
      Field,
80
 
      ExpressionNode
81
 
    };
82
 
 
83
 
    QgsExpressionItem( QString label,
84
 
                       QString expressionText,
85
 
                       QString helpText,
86
 
                       QgsExpressionItem::ItemType itemType = ExpressionNode )
87
 
        : QStandardItem( label )
88
 
    {
89
 
      mExpressionText = expressionText;
90
 
      mHelpText = helpText;
91
 
      mType = itemType;
92
 
    }
93
 
 
94
 
    QgsExpressionItem( QString label,
95
 
                       QString expressionText,
96
 
                       QgsExpressionItem::ItemType itemType = ExpressionNode )
97
 
        : QStandardItem( label )
98
 
    {
99
 
      mExpressionText = expressionText;
100
 
      mType = itemType;
101
 
    }
102
 
 
103
 
    QString getExpressionText() { return mExpressionText; }
104
 
 
105
 
    /** Get the help text that is associated with this expression item.
106
 
      *
107
 
      * @return The help text.
108
 
      */
109
 
    QString getHelpText() {  return mHelpText; }
110
 
    /** Set the help text for the current item
111
 
      *
112
 
      * @note The help text can be set as a html string.
113
 
      */
114
 
    void setHelpText( QString helpText ) { mHelpText = helpText; }
115
 
 
116
 
    /** Get the type of expression item eg header, field, ExpressionNode.
117
 
      *
118
 
      * @return The QgsExpressionItem::ItemType
119
 
      */
120
 
    QgsExpressionItem::ItemType getItemType() { return mType; }
121
 
 
122
 
  private:
123
 
    QString mExpressionText;
124
 
    QString mHelpText;
125
 
    QgsExpressionItem::ItemType mType;
126
 
};
127
 
 
128
139
/** A reusable widget that can be used to build a expression string.
129
140
  * See QgsExpressionBuilderDialog for exmaple of usage.
130
141
  */