16#ifndef QGSVARIABLEEDITORWIDGET_H
17#define QGSVARIABLEEDITORWIDGET_H
24#include <QItemDelegate>
32class QgsVariableEditorTree;
33class VariableEditorDelegate;
82 void setEditableScopeIndex(
int scopeIndex );
114 QVariantMap variablesInActiveScope()
const;
123 void reloadContext();
133 void showEvent( QShowEvent *event )
override;
136 std::unique_ptr<QgsExpressionContext> mContext;
137 int mEditableScopeIndex = -1;
138 QgsVariableEditorTree *mTreeWidget =
nullptr;
139 QPushButton *mAddButton =
nullptr;
140 QPushButton *mRemoveButton =
nullptr;
141 QString mSettingGroup;
144 QString saveKey()
const;
148 void mAddButton_clicked();
149 void mRemoveButton_clicked();
150 void selectionChanged();
162class QgsVariableEditorTree :
public QTreeWidget
169 ContextIndex = Qt::UserRole,
173 explicit QgsVariableEditorTree( QWidget *parent =
nullptr );
175 QTreeWidgetItem *indexToItem(
const QModelIndex &index )
const {
return itemFromIndex( index ); }
176 QModelIndex itemToIndex( QTreeWidgetItem *item )
const {
return indexFromItem( item ); }
177 QString variableNameFromItem( QTreeWidgetItem *item )
const {
return item ? item->text( 0 ) : QString(); }
178 QString variableNameFromIndex(
const QModelIndex &index )
const {
return variableNameFromItem( itemFromIndex( index ) ); }
179 QgsExpressionContextScope *scopeFromItem( QTreeWidgetItem *item )
const;
180 QTreeWidgetItem *itemFromVariable( QgsExpressionContextScope *scope,
const QString &name )
const;
181 void setEditableScopeIndex(
int scopeIndex ) { mEditableScopeIndex = scopeIndex; }
182 QgsExpressionContextScope *editableScope();
183 void setContext( QgsExpressionContext *context ) { mContext = context; }
185 void removeItem( QTreeWidgetItem *item );
186 void renameItem( QTreeWidgetItem *item,
const QString &name );
195 void keyPressEvent( QKeyEvent *event )
override;
196 void mousePressEvent( QMouseEvent *event )
override;
197 void drawRow( QPainter *painter,
const QStyleOptionViewItem &option,
const QModelIndex &index )
const override;
198 QColor rowColor(
int index )
const;
199 void toggleContextExpanded( QTreeWidgetItem *item );
200 void editNext(
const QModelIndex &index );
202 QModelIndex moveCursor( CursorAction cursorAction, Qt::KeyboardModifiers modifiers )
override;
207 VariableEditorDelegate *mEditorDelegate =
nullptr;
208 int mEditableScopeIndex = -1;
209 QgsExpressionContext *mContext =
nullptr;
210 QMap<QPair<int, QString>, QTreeWidgetItem *> mVariableToItem;
211 QMap<int, QTreeWidgetItem *> mScopeToItem;
213 void refreshScopeItems( QgsExpressionContextScope *scope,
int scopeIndex );
214 void refreshScopeVariables( QgsExpressionContextScope *scope,
int scopeIndex );
218class VariableEditorDelegate :
public QItemDelegate
223 VariableEditorDelegate( QObject *parent =
nullptr, QgsVariableEditorTree *tree =
nullptr )
224 : QItemDelegate( parent )
225 , mParentTree( tree )
228 QWidget *createEditor( QWidget *parent,
const QStyleOptionViewItem &option,
const QModelIndex &index )
const override;
229 void updateEditorGeometry( QWidget *editor,
const QStyleOptionViewItem &option,
const QModelIndex &index )
const override;
230 QSize sizeHint(
const QStyleOptionViewItem &option,
const QModelIndex &index )
const override;
231 void setModelData( QWidget *widget, QAbstractItemModel *model,
const QModelIndex &index )
const override;
232 void setEditorData( QWidget *,
const QModelIndex & )
const override {}
235 QgsVariableEditorTree *mParentTree =
nullptr;
Single scope for storing variables and functions for use within a QgsExpressionContext.
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...