/usr/include/qgis/qgsexpressionbuilderwidget.h is in libqgis-dev 2.8.6+dfsg-1build1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 | /***************************************************************************
qgisexpressionbuilderwidget.h - A genric expression string builder widget.
--------------------------------------
Date : 29-May-2011
Copyright : (C) 2011 by Nathan Woodrow
Email : woodrow.nathan at gmail dot com
***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#ifndef QGSEXPRESSIONBUILDER_H
#define QGSEXPRESSIONBUILDER_H
#include <QWidget>
#include "ui_qgsexpressionbuilder.h"
#include "qgsvectorlayer.h"
#include "qgsexpressionhighlighter.h"
#include "qgsdistancearea.h"
#include "QStandardItemModel"
#include "QStandardItem"
#include "QSortFilterProxyModel"
/** Search proxy used to filter the QgsExpressionBuilderWidget tree.
* The default search for a tree model only searches top level this will handle one
* level down
*/
class QgsExpressionItemSearchProxy : public QSortFilterProxyModel
{
public:
QgsExpressionItemSearchProxy() { }
bool filterAcceptsRow( int source_row, const QModelIndex &source_parent ) const override
{
if ( source_parent == qobject_cast<QStandardItemModel*>( sourceModel() )->invisibleRootItem()->index() )
return true;
return QSortFilterProxyModel::filterAcceptsRow( source_row, source_parent );
}
};
/** An expression item that can be used in the QgsExpressionBuilderWidget tree.
*/
class QgsExpressionItem : public QStandardItem
{
public:
enum ItemType
{
Header,
Field,
ExpressionNode
};
QgsExpressionItem( QString label,
QString expressionText,
QString helpText,
QgsExpressionItem::ItemType itemType = ExpressionNode )
: QStandardItem( label )
{
mExpressionText = expressionText;
mHelpText = helpText;
mType = itemType;
}
QgsExpressionItem( QString label,
QString expressionText,
QgsExpressionItem::ItemType itemType = ExpressionNode )
: QStandardItem( label )
{
mExpressionText = expressionText;
mType = itemType;
}
QString getExpressionText() { return mExpressionText; }
/** Get the help text that is associated with this expression item.
*
* @return The help text.
*/
QString getHelpText() { return mHelpText; }
/** Set the help text for the current item
*
* @note The help text can be set as a html string.
*/
void setHelpText( QString helpText ) { mHelpText = helpText; }
/** Get the type of expression item eg header, field, ExpressionNode.
*
* @return The QgsExpressionItem::ItemType
*/
QgsExpressionItem::ItemType getItemType() { return mType; }
private:
QString mExpressionText;
QString mHelpText;
QgsExpressionItem::ItemType mType;
};
/** A reusable widget that can be used to build a expression string.
* See QgsExpressionBuilderDialog for exmaple of usage.
*/
class GUI_EXPORT QgsExpressionBuilderWidget : public QWidget, private Ui::QgsExpressionBuilderWidgetBase
{
Q_OBJECT
public:
QgsExpressionBuilderWidget( QWidget *parent );
~QgsExpressionBuilderWidget();
/** Sets layer in order to get the fields and values
* @note this needs to be called before calling loadFieldNames().
*/
void setLayer( QgsVectorLayer* layer );
/** Loads all the field names from the layer.
* @remarks Should this really be public couldn't we just do this for the user?
*/
void loadFieldNames();
void loadFieldNames( const QgsFields& fields );
/** Sets geometry calculator used in distance/area calculations. */
void setGeomCalculator( const QgsDistanceArea & da );
/** Gets the expression string that has been set in the expression area.
* @returns The expression as a string. */
QString expressionText();
/** Sets the expression string for the widget */
void setExpressionText( const QString& expression );
/** Registers a node item for the expression builder.
* @param group The group the item will be show in the tree view. If the group doesn't exsit it will be created.
* @param label The label that is show to the user for the item in the tree.
* @param expressionText The text that is inserted into the expression area when the user double clicks on the item.
* @param helpText The help text that the user will see when item is selected.
* @param type The type of the expression item.
*/
void registerItem( QString group, QString label, QString expressionText,
QString helpText = "",
QgsExpressionItem::ItemType type = QgsExpressionItem::ExpressionNode );
bool isExpressionValid();
void saveToRecent( QString key );
void loadRecent( QString key );
/** Create a new file in the function editor
*/
void newFunctionFile( QString fileName = "scratch" );
/** Save the current function editor text to the given file.
*/
void saveFunctionFile( QString fileName );
/** Load code from the given file into the function editor
*/
void loadCodeFromFile( QString path );
/** Load code into the function editor
*/
void loadFunctionCode( QString code );
/** Update the list of function files found at the given path
*/
void updateFunctionFileList( QString path );
public slots:
void currentChanged( const QModelIndex &index, const QModelIndex & );
void on_btnRun_pressed();
void on_btnNewFile_pressed();
void on_cmbFileNames_currentIndexChanged( int index );
void on_btnSaveFile_pressed();
void on_expressionTree_doubleClicked( const QModelIndex &index );
void on_txtExpressionString_textChanged();
void on_txtSearchEdit_textChanged();
void on_lblPreview_linkActivated( QString link );
void on_mValueListWidget_itemDoubleClicked( QListWidgetItem* item );
void operatorButtonClicked();
void showContextMenu( const QPoint & );
void loadSampleValues();
void loadAllValues();
private slots:
void setExpressionState( bool state );
signals:
/** Emitted when the user changes the expression in the widget.
* Users of this widget should connect to this signal to decide if to let the user
* continue.
* @param isValid Is true if the expression the user has typed is valid.
*/
void expressionParsed( bool isValid );
private:
void runPythonCode( QString code );
void updateFunctionTree();
void fillFieldValues( int fieldIndex, int countLimit );
QString loadFunctionHelp( QgsExpressionItem* functionName );
/** Formats an expression preview result for display in the widget
* by truncating the string
* @param previewString expression preview result to format
*/
QString formatPreviewString( const QString &previewString ) const;
QString mFunctionsPath;
QgsVectorLayer *mLayer;
QStandardItemModel *mModel;
QgsExpressionItemSearchProxy *mProxyModel;
QMap<QString, QgsExpressionItem*> mExpressionGroups;
QgsFeature mFeature;
QgsExpressionHighlighter* highlighter;
bool mExpressionValid;
QgsDistanceArea mDa;
QString mRecentKey;
};
#endif // QGSEXPRESSIONBUILDER_H
|