/usr/include/qgis/qgsexpressionbuilderwidget.h is in libqgis-dev 2.18.17+dfsg-1.
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 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 | /***************************************************************************
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"
#include "QStringListModel"
/** \ingroup gui
* An expression item that can be used in the QgsExpressionBuilderWidget tree.
*/
class QgsExpressionItem : public QStandardItem
{
public:
enum ItemType
{
Header,
Field,
ExpressionNode
};
QgsExpressionItem( const QString& label,
const QString& expressionText,
const QString& helpText,
QgsExpressionItem::ItemType itemType = ExpressionNode )
: QStandardItem( label )
{
mExpressionText = expressionText;
mHelpText = helpText;
mType = itemType;
setData( itemType, ItemTypeRole );
}
QgsExpressionItem( const QString& label,
const QString& expressionText,
QgsExpressionItem::ItemType itemType = ExpressionNode )
: QStandardItem( label )
{
mExpressionText = expressionText;
mType = itemType;
setData( itemType, ItemTypeRole );
}
QString getExpressionText() const { return mExpressionText; }
/** Get the help text that is associated with this expression item.
*
* @return The help text.
*/
QString getHelpText() const { return mHelpText; }
/** Set the help text for the current item
*
* @note The help text can be set as a html string.
*/
void setHelpText( const QString& helpText ) { mHelpText = helpText; }
/** Get the type of expression item eg header, field, ExpressionNode.
*
* @return The QgsExpressionItem::ItemType
*/
QgsExpressionItem::ItemType getItemType() const { return mType; }
//! Custom sort order role
static const int CustomSortRole = Qt::UserRole + 1;
//! Item type role
static const int ItemTypeRole = Qt::UserRole + 2;
private:
QString mExpressionText;
QString mHelpText;
QgsExpressionItem::ItemType mType;
};
/** \ingroup gui
* 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 GUI_EXPORT QgsExpressionItemSearchProxy : public QSortFilterProxyModel
{
Q_OBJECT
public:
QgsExpressionItemSearchProxy();
bool filterAcceptsRow( int source_row, const QModelIndex &source_parent ) const override;
protected:
bool lessThan( const QModelIndex &left, const QModelIndex &right ) const override;
};
/** \ingroup gui
* 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:
/**
* Create a new expression builder widget with an optional parent.
*/
QgsExpressionBuilderWidget( QWidget* parent = nullptr );
~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 );
/** Loads field names and values from the specified map.
* @note The field values must be quoted appropriately if they are strings.
* @note added in QGIS 2.12
*/
void loadFieldsAndValues( const QMap<QString, QStringList>& fieldValues );
/** 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 );
/** Returns the expression context for the widget. The context is used for the expression
* preview result and for populating the list of available functions and variables.
* @see setExpressionContext
* @note added in QGIS 2.12
*/
QgsExpressionContext expressionContext() const { return mExpressionContext; }
/** Sets the expression context for the widget. The context is used for the expression
* preview result and for populating the list of available functions and variables.
* @param context expression context
* @see expressionContext
* @note added in QGIS 2.12
*/
void setExpressionContext( const QgsExpressionContext& context );
/** 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.
* @param highlightedItem set to true to make the item highlighted, which inserts a bold copy of the item at the top level
* @param sortOrder sort ranking for item
*/
void registerItem( const QString& group, const QString& label, const QString& expressionText,
const QString& helpText = "",
QgsExpressionItem::ItemType type = QgsExpressionItem::ExpressionNode,
bool highlightedItem = false, int sortOrder = 1 );
bool isExpressionValid();
/**
* Adds the current expression to the given collection.
* By default it is saved to the collection "generic".
*/
void saveToRecent( const QString& collection = "generic" );
/**
* Loads the recent expressions from the given collection.
* By default it is loaded from the collection "generic".
*/
void loadRecent( const QString& collection = "generic" );
/** Create a new file in the function editor
*/
void newFunctionFile( const 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( const QString& code );
/** Update the list of function files found at the given path
*/
void updateFunctionFileList( const QString& path );
public slots:
/**
* Load sample values into the sample value area
*/
void loadSampleValues();
/**
* Load all unique values from the set layer into the sample area
*/
void loadAllValues();
/**
* Auto save the current Python function code.
*/
void autosave();
/**
* Enabled or disable auto saving. When enabled Python scripts will be auto saved
* when text changes.
* @param enabled True to enable auto saving.
*/
void setAutoSave( bool enabled ) { mAutoSave = enabled; }
private slots:
void showContextMenu( QPoint );
void setExpressionState( bool state );
void currentChanged( const QModelIndex &index, const QModelIndex & );
void operatorButtonClicked();
void on_btnRun_pressed();
void on_btnNewFile_pressed();
void on_cmbFileNames_currentItemChanged( QListWidgetItem* item, QListWidgetItem* lastitem );
void on_expressionTree_doubleClicked( const QModelIndex &index );
void on_txtExpressionString_textChanged();
void on_txtSearchEdit_textChanged();
void on_txtSearchEditValues_textChanged();
void on_lblPreview_linkActivated( const QString& link );
void on_mValuesListView_doubleClicked( const QModelIndex &index );
void on_txtPython_textChanged();
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 );
protected:
void showEvent( QShowEvent *e );
private:
void runPythonCode( const QString& code );
void updateFunctionTree();
void fillFieldValues( const QString &fieldName, int countLimit );
QString loadFunctionHelp( QgsExpressionItem* functionName );
QString helpStylesheet() const;
void loadExpressionContext();
/** Registers a node item for the expression builder, adding multiple items when the function exists in multiple groups
* @param groups The groups the item will be show in the tree view. If a group doesn't exist 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.
* @param highlightedItem set to true to make the item highlighted, which inserts a bold copy of the item at the top level
* @param sortOrder sort ranking for item
*/
void registerItemForAllGroups( const QStringList& groups, const QString& label, const QString& expressionText,
const QString& helpText = "",
QgsExpressionItem::ItemType type = QgsExpressionItem::ExpressionNode,
bool highlightedItem = false, int sortOrder = 1 );
bool mAutoSave;
QString mFunctionsPath;
QgsVectorLayer *mLayer;
QStandardItemModel *mModel;
QStringListModel *mValuesModel;
QSortFilterProxyModel *mProxyValues;
QgsExpressionItemSearchProxy *mProxyModel;
QMap<QString, QgsExpressionItem*> mExpressionGroups;
QgsFeature mFeature;
QgsExpressionHighlighter* highlighter;
bool mExpressionValid;
QgsDistanceArea mDa;
QString mRecentKey;
QMap<QString, QStringList> mFieldValues;
QgsExpressionContext mExpressionContext;
};
#endif // QGSEXPRESSIONBUILDER_H
|