16#ifndef QGSVARIABLEEDITORWIDGET_H
17#define QGSVARIABLEEDITORWIDGET_H
22#include <QItemDelegate>
30class QgsVariableEditorTree;
31class VariableEditorDelegate;
46 Q_PROPERTY( QString settingGroup READ settingGroup WRITE setSettingGroup )
80 void setEditableScopeIndex(
int scopeIndex );
112 QVariantMap variablesInActiveScope()
const;
121 void reloadContext();
131 void showEvent( QShowEvent *event )
override;
134 std::unique_ptr<QgsExpressionContext> mContext;
135 int mEditableScopeIndex = -1;
136 QgsVariableEditorTree *mTreeWidget =
nullptr;
137 QPushButton *mAddButton =
nullptr;
138 QPushButton *mRemoveButton =
nullptr;
139 QString mSettingGroup;
142 QString saveKey()
const;
146 void mAddButton_clicked();
147 void mRemoveButton_clicked();
148 void selectionChanged();
160class QgsVariableEditorTree :
public QTreeWidget
167 ContextIndex = Qt::UserRole,
171 explicit QgsVariableEditorTree( QWidget *parent =
nullptr );
173 QTreeWidgetItem *indexToItem(
const QModelIndex &index )
const {
return itemFromIndex( index ); }
174 QModelIndex itemToIndex( QTreeWidgetItem *item )
const {
return indexFromItem( item ); }
175 QString variableNameFromItem( QTreeWidgetItem *item )
const {
return item ? item->text( 0 ) : QString(); }
176 QString variableNameFromIndex(
const QModelIndex &index )
const {
return variableNameFromItem( itemFromIndex( index ) ); }
179 void setEditableScopeIndex(
int scopeIndex ) { mEditableScopeIndex = scopeIndex; }
183 void removeItem( QTreeWidgetItem *item );
184 void renameItem( QTreeWidgetItem *item,
const QString &name );
193 void keyPressEvent( QKeyEvent *event )
override;
194 void mousePressEvent( QMouseEvent *event )
override;
195 void drawRow( QPainter *painter,
const QStyleOptionViewItem &option,
const QModelIndex &index )
const override;
196 QColor rowColor(
int index )
const;
197 void toggleContextExpanded( QTreeWidgetItem *item );
198 void editNext(
const QModelIndex &index );
200 QModelIndex moveCursor( CursorAction cursorAction, Qt::KeyboardModifiers modifiers )
override;
205 VariableEditorDelegate *mEditorDelegate =
nullptr;
206 int mEditableScopeIndex = -1;
208 QMap<QPair<int, QString>, QTreeWidgetItem *> mVariableToItem;
209 QMap<int, QTreeWidgetItem *> mScopeToItem;
216class VariableEditorDelegate :
public QItemDelegate
221 VariableEditorDelegate( QObject *parent =
nullptr, QgsVariableEditorTree *tree =
nullptr )
222 : QItemDelegate( parent )
223 , mParentTree( tree )
226 QWidget *createEditor( QWidget *parent,
const QStyleOptionViewItem &option,
const QModelIndex &index )
const override;
227 void updateEditorGeometry( QWidget *editor,
const QStyleOptionViewItem &option,
const QModelIndex &index )
const override;
228 QSize sizeHint(
const QStyleOptionViewItem &option,
const QModelIndex &index )
const override;
229 void setModelData( QWidget *widget, QAbstractItemModel *model,
const QModelIndex &index )
const override;
230 void setEditorData( QWidget *,
const QModelIndex & )
const override {}
233 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...