37 #include <QMessageBox> 38 #include <QProgressDialog> 40 #include <QInputDialog> 43 : QStackedWidget( parent )
49 mConditionalFormatWidget->hide();
51 mPreviewColumnsMenu =
new QMenu(
this );
52 mActionPreviewColumnsMenu->setMenu( mPreviewColumnsMenu );
58 connect( mActionExpressionPreview, &QAction::triggered,
this, &QgsDualView::previewExpressionBuilder );
69 mEditorContext = context;
72 mTableView->horizontalHeader()->setContextMenuPolicy( Qt::CustomContextMenu );
73 connect( mTableView->horizontalHeader(), &QHeaderView::customContextMenuRequested,
this, &QgsDualView::showViewHeaderMenu );
78 initModels( mapCanvas, request, loadFeatures );
80 mConditionalFormatWidget->setLayer( mLayer );
82 mTableView->setModel( mFilterModel );
83 mFeatureList->setModel( mFeatureListModel );
84 delete mAttributeForm;
85 mAttributeForm =
new QgsAttributeForm( mLayer, mTempAttributeFormFeature, mEditorContext );
90 mAttributeEditorScrollArea->setWidgetResizable(
true );
91 mAttributeEditor->layout()->addWidget( mAttributeEditorScrollArea );
92 mAttributeEditorScrollArea->setWidget( mAttributeForm );
96 mAttributeEditor->layout()->addWidget( mAttributeForm );
105 if ( mFeatureListPreviewButton->defaultAction() )
106 mFeatureList->setDisplayExpression( mDisplayExpression );
113 mFeatureList->setEditSelection(
QgsFeatureIds() << mFeatureListModel->
idxToFid( mFeatureListModel->index( 0, 0 ) ) );
116 void QgsDualView::columnBoxInit()
119 QList<QgsField> fields = mLayer->fields().toList();
121 QString defaultField;
124 QString displayExpression = mLayer->displayExpression();
126 if ( displayExpression.isEmpty() )
129 displayExpression = QStringLiteral(
"'[Please define preview text]'" );
132 mFeatureListPreviewButton->addAction( mActionExpressionPreview );
133 mFeatureListPreviewButton->addAction( mActionPreviewColumnsMenu );
135 Q_FOREACH (
const QgsField &field, fields )
137 int fieldIndex = mLayer->fields().lookupField( field.
name() );
138 if ( fieldIndex == -1 )
141 QString fieldName = field.
name();
144 QIcon icon = mLayer->fields().iconForField( fieldIndex );
145 QString text = mLayer->attributeDisplayName( fieldIndex );
148 QAction *previewAction =
new QAction( icon, text, mFeatureListPreviewButton );
149 connect( previewAction, &QAction::triggered,
this, [ = ] { previewColumnChanged( previewAction, fieldName ); } );
150 mPreviewColumnsMenu->addAction( previewAction );
152 if ( text == defaultField )
154 mFeatureListPreviewButton->setDefaultAction( previewAction );
159 QAction *sortByPreviewExpression =
new QAction(
QgsApplication::getThemeIcon( QStringLiteral(
"sort.svg" ) ), tr(
"Sort by preview expression" ),
this );
160 connect( sortByPreviewExpression, &QAction::triggered,
this, &QgsDualView::sortByPreviewExpression );
161 mFeatureListPreviewButton->addAction( sortByPreviewExpression );
163 QAction *separator =
new QAction( mFeatureListPreviewButton );
164 separator->setSeparator(
true );
165 mFeatureListPreviewButton->addAction( separator );
166 restoreRecentDisplayExpressions();
169 if ( !mFeatureListPreviewButton->defaultAction() )
171 mFeatureList->setDisplayExpression( displayExpression );
172 mFeatureListPreviewButton->setDefaultAction( mActionExpressionPreview );
173 setDisplayExpression( mFeatureList->displayExpression() );
177 mFeatureListPreviewButton->defaultAction()->trigger();
183 setCurrentIndex( view );
215 || ( mMasterModel->
rowCount() == 0 );
217 if ( !needsGeometry )
226 switch ( filterMode )
248 if ( requiresTableReload )
251 whileBlocking( mLayerCache )->setCacheGeometry( needsGeometry );
265 void QgsDualView::initLayerCache(
bool cacheGeometry )
269 int cacheSize = settings.
value( QStringLiteral(
"qgis/attributeTableRowCache" ),
"10000" ).toInt();
275 rebuildFullLayerCache();
281 delete mFeatureListModel;
302 connect( mMasterModel, &QgsAttributeTableModel::rowsRemoved, mFilterModel, &QgsAttributeTableFilterModel::invalidate );
303 connect( mMasterModel, &QgsAttributeTableModel::rowsInserted, mFilterModel, &QgsAttributeTableFilterModel::invalidate );
311 void QgsDualView::restoreRecentDisplayExpressions()
313 const QVariantList previewExpressions = mLayer->customProperty( QStringLiteral(
"dualview/previewExpressions" ) ).toList();
315 for (
const QVariant &previewExpression : previewExpressions )
316 insertRecentlyUsedDisplayExpression( previewExpression.toString() );
319 void QgsDualView::saveRecentDisplayExpressions()
const 325 QList<QAction *> actions = mFeatureListPreviewButton->actions();
328 int index = actions.indexOf( mLastDisplayExpressionAction );
331 QVariantList previewExpressions;
332 for ( ; index < actions.length(); ++index )
334 QAction *action = actions.at( index );
335 previewExpressions << action->property(
"previewExpression" );
338 mLayer->setCustomProperty( QStringLiteral(
"dualview/previewExpressions" ), previewExpressions );
342 void QgsDualView::setDisplayExpression(
const QString &expression )
344 mDisplayExpression = expression;
345 insertRecentlyUsedDisplayExpression( expression );
348 void QgsDualView::insertRecentlyUsedDisplayExpression(
const QString &expression )
350 QList<QAction *> actions = mFeatureListPreviewButton->actions();
353 int index = actions.indexOf( mLastDisplayExpressionAction );
356 for (
int i = 0; index + i < actions.length(); ++i )
358 QAction *action = actions.at( index );
359 if ( action->text() == expression || i >= 9 )
361 if ( action == mLastDisplayExpressionAction )
362 mLastDisplayExpressionAction =
nullptr;
363 mFeatureListPreviewButton->removeAction( action );
367 if ( !mLastDisplayExpressionAction )
368 mLastDisplayExpressionAction = action;
373 QString name = expression;
375 if ( expression.startsWith( QLatin1String(
"COALESCE( \"" ) ) && expression.endsWith( QLatin1String(
", '<NULL>' )" ) ) )
377 name = expression.mid( 11, expression.length() - 24 );
379 int fieldIndex = mLayer->fields().indexOf( name );
380 if ( fieldIndex != -1 )
382 name = mLayer->attributeDisplayName( fieldIndex );
383 icon = mLayer->fields().iconForField( fieldIndex );
391 QAction *previewAction =
new QAction( icon, name, mFeatureListPreviewButton );
392 previewAction->setProperty(
"previewExpression", expression );
393 connect( previewAction, &QAction::triggered,
this, [expression,
this](
bool )
395 setDisplayExpression( expression );
396 mFeatureListPreviewButton->setText( expression );
400 mFeatureListPreviewButton->insertAction( mLastDisplayExpressionAction, previewAction );
401 mLastDisplayExpressionAction = previewAction;
404 void QgsDualView::mFeatureList_aboutToChangeEditSelection(
bool &ok )
406 if ( mLayer->isEditable() && !mAttributeForm->
save() )
410 void QgsDualView::mFeatureList_currentEditSelectionChanged(
const QgsFeature &feat )
412 if ( !mAttributeForm )
414 mTempAttributeFormFeature = feat;
416 else if ( !mLayer->isEditable() || mAttributeForm->
save() )
429 mFeatureList->setCurrentFeatureEdited(
false );
430 mFeatureList->setEditSelection( fids );
435 return mAttributeForm->
save();
440 mConditionalFormatWidget->setVisible( !mConditionalFormatWidget->isVisible() );
441 mConditionalFormatWidget->viewRules();
465 void QgsDualView::previewExpressionBuilder()
471 dlg.setWindowTitle( tr(
"Expression Based Preview" ) );
474 if ( dlg.exec() == QDialog::Accepted )
476 mFeatureList->setDisplayExpression( dlg.expressionText() );
477 mFeatureListPreviewButton->setDefaultAction( mActionExpressionPreview );
478 mFeatureListPreviewButton->setPopupMode( QToolButton::MenuButtonPopup );
481 setDisplayExpression( mFeatureList->displayExpression() );
484 void QgsDualView::previewColumnChanged( QAction *previewAction,
const QString &expression )
486 if ( !mFeatureList->setDisplayExpression( QStringLiteral(
"COALESCE( \"%1\", '<NULL>' )" ).arg( expression ) ) )
488 QMessageBox::warning(
this,
489 tr(
"Column Preview" ),
490 tr(
"Could not set column '%1' as preview column.\nParser error:\n%2" )
491 .arg( previewAction->text(), mFeatureList->parserErrorString() )
496 mFeatureListPreviewButton->setText( previewAction->text() );
497 mFeatureListPreviewButton->setIcon( previewAction->icon() );
498 mFeatureListPreviewButton->setPopupMode( QToolButton::InstantPopup );
501 setDisplayExpression( mFeatureList->displayExpression() );
511 return mFilterModel->rowCount();
516 QAction *action = qobject_cast<QAction *>( sender() );
518 if ( action && action->data().isValid() && action->data().canConvert<QModelIndex>() )
520 QModelIndex index = action->data().toModelIndex();
522 QApplication::clipboard()->setText( var.toString() );
529 mProgressDlg->cancel();
535 saveRecentDisplayExpressions();
538 void QgsDualView::viewWillShowContextMenu( QMenu *menu,
const QModelIndex &atIndex )
545 QModelIndex sourceIndex = mFilterModel->
mapToSource( atIndex );
547 QAction *copyContentAction =
new QAction( tr(
"Copy Cell Content" ),
this );
548 copyContentAction->setData( QVariant::fromValue<QModelIndex>( sourceIndex ) );
549 menu->addAction( copyContentAction );
556 menu->addAction( tr(
"Zoom to Feature" ),
this, SLOT( zoomToCurrentFeature() ) );
557 menu->addAction( tr(
"Pan to Feature" ),
this, SLOT( panToCurrentFeature() ) );
558 menu->addAction( tr(
"Flash Feature" ),
this, SLOT( flashCurrentFeature() ) );
562 QList<QgsAction> actions = mLayer->actions()->actions( QStringLiteral(
"Field" ) );
563 if ( !actions.isEmpty() )
565 QAction *a = menu->addAction( tr(
"Run Layer Action" ) );
566 a->setEnabled(
false );
568 Q_FOREACH (
const QgsAction &action, actions )
577 #if QT_VERSION < QT_VERSION_CHECK(5, 6, 0) 578 menu->addAction( action.
name(), a, SLOT( execute() ) );
587 if ( !registeredActions.isEmpty() )
590 menu->addSeparator();
595 #if QT_VERSION < QT_VERSION_CHECK(5, 6, 0) 596 menu->addAction( action->text(), a, SLOT( execut() ) );
603 menu->addSeparator();
605 #if QT_VERSION < QT_VERSION_CHECK(5, 6, 0) 606 menu->addAction( tr(
"Open Form" ), a, SLOT( featureForm() ) );
613 void QgsDualView::widgetWillShowContextMenu(
QgsActionMenu *menu,
const QModelIndex &atIndex )
619 void QgsDualView::showViewHeaderMenu( QPoint point )
621 int col = mTableView->columnAt( point.x() );
623 delete mHorizontalHeaderMenu;
624 mHorizontalHeaderMenu =
new QMenu(
this );
626 QAction *hide =
new QAction( tr(
"&Hide Column" ), mHorizontalHeaderMenu );
627 connect( hide, &QAction::triggered,
this, &QgsDualView::hideColumn );
628 hide->setData( col );
629 mHorizontalHeaderMenu->addAction( hide );
630 QAction *setWidth =
new QAction( tr(
"&Set Width…" ), mHorizontalHeaderMenu );
631 connect( setWidth, &QAction::triggered,
this, &QgsDualView::resizeColumn );
632 setWidth->setData( col );
633 mHorizontalHeaderMenu->addAction( setWidth );
634 QAction *optimizeWidth =
new QAction( tr(
"&Autosize" ), mHorizontalHeaderMenu );
635 connect( optimizeWidth, &QAction::triggered,
this, &QgsDualView::autosizeColumn );
636 optimizeWidth->setData( col );
637 mHorizontalHeaderMenu->addAction( optimizeWidth );
639 mHorizontalHeaderMenu->addSeparator();
640 QAction *organize =
new QAction( tr(
"&Organize Columns…" ), mHorizontalHeaderMenu );
641 connect( organize, &QAction::triggered,
this, &QgsDualView::organizeColumns );
642 mHorizontalHeaderMenu->addAction( organize );
643 QAction *sort =
new QAction( tr(
"&Sort…" ), mHorizontalHeaderMenu );
644 connect( sort, &QAction::triggered,
this, &QgsDualView::modifySort );
645 mHorizontalHeaderMenu->addAction( sort );
647 mHorizontalHeaderMenu->popup( mTableView->horizontalHeader()->mapToGlobal( point ) );
650 void QgsDualView::organizeColumns()
658 if ( dialog.exec() == QDialog::Accepted )
665 void QgsDualView::tableColumnResized(
int column,
int width )
669 if ( sourceCol >= 0 && config.
columnWidth( sourceCol ) != width )
676 void QgsDualView::hideColumn()
678 QAction *action = qobject_cast<QAction *>( sender() );
679 int col = action->data().toInt();
682 if ( sourceCol >= 0 )
689 void QgsDualView::resizeColumn()
691 QAction *action = qobject_cast<QAction *>( sender() );
692 int col = action->data().toInt();
698 if ( sourceCol >= 0 )
701 int width = QInputDialog::getInt(
this, tr(
"Set column width" ), tr(
"Enter column width" ),
702 mTableView->columnWidth( col ),
712 void QgsDualView::autosizeColumn()
714 QAction *action = qobject_cast<QAction *>( sender() );
715 int col = action->data().toInt();
716 mTableView->resizeColumnToContents( col );
719 void QgsDualView::modifySort()
727 orderByDlg.setWindowTitle( tr(
"Configure Attribute Table Sort Order" ) );
728 QDialogButtonBox *dialogButtonBox =
new QDialogButtonBox( QDialogButtonBox::Ok | QDialogButtonBox::Cancel );
729 QGridLayout *layout =
new QGridLayout();
730 connect( dialogButtonBox, &QDialogButtonBox::accepted, &orderByDlg, &QDialog::accept );
731 connect( dialogButtonBox, &QDialogButtonBox::rejected, &orderByDlg, &QDialog::reject );
732 orderByDlg.setLayout( layout );
734 QGroupBox *sortingGroupBox =
new QGroupBox();
735 sortingGroupBox->setTitle( tr(
"Defined sort order in attribute table" ) );
736 sortingGroupBox->setCheckable(
true );
738 layout->addWidget( sortingGroupBox );
739 sortingGroupBox->setLayout(
new QGridLayout() );
744 expressionBuilder->
setLayer( mLayer );
746 expressionBuilder->
loadRecent( QStringLiteral(
"generic" ) );
749 sortingGroupBox->layout()->addWidget( expressionBuilder );
751 QCheckBox *cbxSortAscending =
new QCheckBox( tr(
"Sort ascending" ) );
752 cbxSortAscending->setChecked( config.
sortOrder() == Qt::AscendingOrder );
753 sortingGroupBox->layout()->addWidget( cbxSortAscending );
755 layout->addWidget( dialogButtonBox );
756 if ( orderByDlg.exec() )
758 Qt::SortOrder sortOrder = cbxSortAscending->isChecked() ? Qt::AscendingOrder : Qt::DescendingOrder;
759 if ( sortingGroupBox->isChecked() )
775 void QgsDualView::zoomToCurrentFeature()
777 QModelIndex currentIndex = mTableView->currentIndex();
778 if ( !currentIndex.isValid() )
784 ids.insert( mFilterModel->
rowToId( currentIndex ) );
792 void QgsDualView::panToCurrentFeature()
794 QModelIndex currentIndex = mTableView->currentIndex();
795 if ( !currentIndex.isValid() )
801 ids.insert( mFilterModel->
rowToId( currentIndex ) );
809 void QgsDualView::flashCurrentFeature()
811 QModelIndex currentIndex = mTableView->currentIndex();
812 if ( !currentIndex.isValid() )
818 ids.insert( mFilterModel->
rowToId( currentIndex ) );
826 void QgsDualView::rebuildFullLayerCache()
834 void QgsDualView::previewExpressionChanged(
const QString &expression )
836 mLayer->setDisplayExpression( expression );
839 void QgsDualView::onSortColumnChanged()
843 cfg.
sortOrder() != mFilterModel->sortOrder() )
851 void QgsDualView::sortByPreviewExpression()
853 Qt::SortOrder sortOrder = Qt::AscendingOrder;
856 sortOrder = mConfig.
sortOrder() == Qt::AscendingOrder ? Qt::DescendingOrder : Qt::AscendingOrder;
861 void QgsDualView::updateSelectedFeatures()
873 void QgsDualView::extentChanged()
886 void QgsDualView::featureFormAttributeChanged(
const QString &attribute,
const QVariant &value,
bool attributeChanged )
888 Q_UNUSED( attribute );
890 if ( attributeChanged )
891 mFeatureList->setCurrentFeatureEdited(
true );
906 mTableView->setFeatureSelectionManager( featureSelectionManager );
907 mFeatureList->setFeatureSelectionManager( featureSelectionManager );
909 if ( mFeatureSelectionManager && mFeatureSelectionManager->parent() == this )
910 delete mFeatureSelectionManager;
912 mFeatureSelectionManager = featureSelectionManager;
918 mConfig.
update( mLayer->fields() );
919 mLayer->setAttributeTableConfig( mConfig );
921 mTableView->setAttributeTableConfig( mConfig );
926 if ( sortExpression.isNull() )
927 mFilterModel->
sort( -1 );
929 mFilterModel->
sort( sortExpression, sortOrder );
941 void QgsDualView::progress(
int i,
bool &cancel )
945 mProgressDlg =
new QProgressDialog( tr(
"Loading features…" ), tr(
"Abort" ), 0, 0,
this );
946 mProgressDlg->setWindowTitle( tr(
"Attribute Table" ) );
947 mProgressDlg->setWindowModality( Qt::WindowModal );
948 mProgressDlg->show();
951 mProgressDlg->setLabelText( tr(
"%1 features loaded." ).arg( i ) );
952 QCoreApplication::processEvents();
954 cancel = mProgressDlg && mProgressDlg->wasCanceled();
957 void QgsDualView::finished()
960 mProgressDlg =
nullptr;
969 mDualView->masterModel()->executeAction( mAction, mFieldIdx );
975 editedIds << mDualView->masterModel()->rowToId( mFieldIdx.row() );
976 mDualView->setCurrentEditSelection( editedIds );
986 mDualView->masterModel()->executeMapLayerAction( mAction, mFieldIdx );
void setRequest(const QgsFeatureRequest &request)
Set a request that will be used to fill this attribute table model.
QgsFeatureId rowToId(const QModelIndex &row)
Returns the feature id for a given model index.
QgsVectorLayer * layer() const
Returns the layer this filter acts on.
void setFilterMode(QgsAttributeTableFilterModel::FilterMode filterMode)
Set the filter mode.
A rectangle specified with double values.
void setSortExpression(const QString &sortExpression)
Set the sort expression used for sorting.
virtual void loadLayer()
Loads the layer into the model Preferably to be called, before using this model as source for any oth...
void update(const QgsFields &fields)
Update the configuration with the given fields.
void setAttributeTableConfig(const QgsAttributeTableConfig &config)
Set the attribute table configuration to control which fields are shown, in which order they are show...
void init(QgsVectorLayer *layer, QgsMapCanvas *mapCanvas, const QgsFeatureRequest &request=QgsFeatureRequest(), const QgsAttributeEditorContext &context=QgsAttributeEditorContext(), bool loadFeatures=true)
Has to be called to initialize the dual view.
void setExpressionText(const QString &text)
QgsFeatureId idxToFid(const QModelIndex &index) const
Returns the feature ID corresponding to an index from the model.
QgsAttributeTableConfig config() const
Gets the updated configuration.
void willShowContextMenu(QMenu *menu, const QModelIndex &atIndex)
Is emitted, in order to provide a hook to add additional* menu entries to the context menu...
const Flags & flags() const
void setSelectedOnTop(bool selectedOnTop)
Changes the sort order of the features.
QgsAttributeTableModel * masterModel() const
Returns the model which has the information about all features (not only filtered) ...
void filterExpressionSet(const QString &expression, QgsAttributeForm::FilterType type)
Is emitted when a filter expression is set using the view.
void setSortOrder(Qt::SortOrder sortOrder)
Set the sort order.
void setFilterMode(FilterMode filterMode)
Set the filter mode the filter will use.
void toggleSearchMode(bool enabled)
Toggles whether search mode should be enabled in the form.
void setFeatureSelectionManager(QgsIFeatureSelectionManager *featureSelectionManager)
Set the feature selection model.
This class is a composition of two QSettings instances:
void invalidated()
The cache has been invalidated and cleared.
void openConditionalStyles()
QVariant value(const QString &key, const QVariant &defaultValue=QVariant(), Section section=NoSection) const
Returns the value for setting key.
QSet< QgsFeatureId > QgsFeatureIds
QString sortExpression() const
Gets the expression used for sorting the table and feature list.
This class contains context information for attribute editor widgets.
bool isEnabledOnlyWhenEditable() const
Returns whether only enabled in editable mode.
ViewMode
The view modes, in which this widget can present information.
void willShowContextMenu(QgsActionMenu *menu, const QModelIndex &atIndex)
Is emitted, when the context menu is created to add the specific actions to it.
FilterType filterType() const
Returns the filter type which is currently set on this request.
int columnWidth(int column) const
Returns the width of a column, or -1 if column should use default width.
QgsWkbTypes::GeometryType geometryType() const
Returns point, line or polygon.
QModelIndex mapToSource(const QModelIndex &proxyIndex) const override
static QIcon getThemeIcon(const QString &name)
Helper to get a theme icon.
void fieldConditionalStyleChanged(const QString &fieldName)
Handles updating the model when the conditional style for a field changes.
int filteredFeatureCount()
Returns the number of features which are currently visible, according to the filter restrictions...
void columnResized(int column, int width)
Emitted when a column in the view has been resized.
The feature class encapsulates a single feature including its id, geometry and a list of field/values...
A model backed by a QgsVectorLayerCache which is able to provide feature/attribute information to a Q...
Show only visible features (depends on the map canvas)
void setCurrentEditSelection(const QgsFeatureIds &fids)
Set the current edit selection in the AttributeEditor mode.
int mapVisibleColumnToIndex(int visibleColumn) const
Maps a visible column index to its original column index.
bool isEditable() const override
Returns true if the provider is in editing mode.
const QgsRectangle & filterRect() const
Returns the rectangle from which features will be taken.
Map canvas is a class for displaying all GIS data types on a canvas.
void hideEvent(QHideEvent *event) override
void setView(ViewMode view)
Change the current view mode.
virtual void setFilteredFeatures(const QgsFeatureIds &ids)
Specify a list of features, which the filter will accept.
QVariant data(const QModelIndex &index, int role) const override
Returns data on the given index.
void setAttributeTableConfig(const QgsAttributeTableConfig &config)
Set the attribute table config which should be used to control the appearance of the attribute table...
QgsDualView(QWidget *parent=nullptr)
Constructor.
Show a list of the features, where one can be chosen and the according attribute dialog will be prese...
void setColumnWidth(int column, int width)
Sets the width of a column.
void copyCellContent() const
Copy the content of the selected cell in the clipboard.
void setSortExpression(const QString &sortExpression, Qt::SortOrder sortOrder=Qt::AscendingOrder)
Set the expression used for sorting the table and feature list.
Show only selected features.
FilterMode filterMode()
The current filterModel.
void setExtraColumns(int extraColumns)
Empty extra columns to announce from this model.
FilterMode
The filter mode defines how the rows should be filtered.
void flashFeatureIds(QgsVectorLayer *layer, const QgsFeatureIds &ids, const QColor &startColor=QColor(255, 0, 0, 255), const QColor &endColor=QColor(255, 0, 0, 0), int flashes=3, int duration=500)
Causes a set of features with matching ids from a vector layer to flash within the canvas...
Dialog for organising (hiding and reordering) columns in the attributes table.
void aboutToChangeEditSelection(bool &ok)
void setEditorContext(const QgsAttributeEditorContext &context)
Sets the context in which this table is shown.
QgsFeatureRequest & disableFilter()
Disables filter conditions.
static QgsEditorWidgetRegistry * editorWidgetRegistry()
Returns the global editor widget registry, used for managing all known edit widget factories...
ViewMode view() const
Returns the current view mode.
Utility class that encapsulates an action based on vector attributes.
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
void progress(int i, bool &cancel)
When filling the cache, this signal gets emitted periodically to notify about the progress and to be ...
QgsRectangle extent() const
Returns the current zoom extent of the map canvas.
void panToFeatureIds(QgsVectorLayer *layer, const QgsFeatureIds &ids)
Centers canvas extent to feature ids.
This class wraps a request for features to a vector layer (or directly its vector data provider)...
bool runable() const
Checks if the action is runable on the current platform.
QgsFeatureRequest & setFilterRect(const QgsRectangle &rectangle)
Sets the rectangle from which features will be taken.
QgsFeatureIds filteredFeatures()
Gets a list of currently visible feature ids.
void displayExpressionChanged(const QString &expression)
Is emitted, whenever the display expression is successfully changed.
void filterChanged()
Is emitted, whenever the filter changes.
QString name() const
The name of the action. This may be a longer description.
void selectionChanged(const QgsFeatureIds &selected, const QgsFeatureIds &deselected, bool clearAndSelect)
This signal is emitted when selection was changed.
Show only features which have unsaved changes.
const QgsFeatureRequest & request() const
Gets the the feature request.
static QList< QgsExpressionContextScope * > globalProjectLayerScopes(const QgsMapLayer *layer)
Creates a list of three scopes: global, layer's project and layer.
Encapsulate a field in an attribute table or data source.
Fast access to features using their ID.
void cancelProgress()
Cancel the progress dialog (if any)
QString sortExpression() const
The expression which is used to sort the attribute table.
This class caches features of a given QgsVectorLayer.
const QgsAttributeEditorContext * parentContext() const
bool saveEditChanges()
saveEditChanges
Show only features whose ids are on the filter list. {.
void progress(int i, bool &cancel)
const QgsMapSettings & mapSettings() const
Gets access to properties used for map rendering.
void setRequest(const QgsFeatureRequest &request)
Set the request.
QgsAttributeTableFilterModel::FilterMode filterMode()
Gets the filter mode.
void modelChanged()
Model has been changed.
void setSelectedOnTop(bool selectedOnTop)
Toggle the selectedOnTop flag.
void showContextMenuExternally(QgsActionMenu *menu, QgsFeatureId fid)
Emitted when selecting context menu on the feature list to create the context menu individually...
QgsSignalBlocker< Object > whileBlocking(Object *object)
Temporarily blocks signals from a QObject while calling a single method from the object.
void zoomToFeatureIds(QgsVectorLayer *layer, const QgsFeatureIds &ids)
Set canvas extent to the bounding box of a set of features.
QgsFeatureRequest & setFilterFids(const QgsFeatureIds &fids)
Sets feature IDs that should be fetched.
int rowCount(const QModelIndex &parent=QModelIndex()) const override
Returns the number of rows.
void setCacheGeometry(bool cacheGeometry)
Enable or disable the caching of geometries.
void setFullCache(bool fullCache)
This enables or disables full caching.
void sort(int column, Qt::SortOrder order=Qt::AscendingOrder) override
Sort by the given column using the given order.
void setColumnHidden(int column, bool hidden)
Sets whether the specified column should be hidden.
bool isNull() const
Test if the rectangle is null (all coordinates zero or after call to setMinimal()).
QgsMapCanvas * mapCanvas() const
Returns the map canvas.
void displayExpressionChanged(const QString &expression)
Is emitted, whenever the display expression is successfully changed.
QList< QgsMapLayerAction * > mapLayerActions(QgsMapLayer *layer, QgsMapLayerAction::Targets targets=QgsMapLayerAction::AllActions)
Returns the map layer actions which can run on the specified layer.
void formModeChanged(QgsAttributeForm::Mode mode)
Emitted when the form changes mode.
QUuid id() const
Returns a unique id for this action.
void setSortByDisplayExpression(bool sortByDisplayExpression)
Sort this model by its display expression.
void setFilteredFeatures(const QgsFeatureIds &filteredFeatures)
Set a list of currently visible features.
This is a container for configuration of the attribute table.
Qt::SortOrder sortOrder() const
Gets the sort order.
Geometry is not required. It may still be returned if e.g. required for a filter condition.
void setMultiEditEnabled(bool enabled)
Sets whether multi edit mode is enabled.
Is an interface class to abstract feature selection handling.
void currentEditSelectionChanged(QgsFeature &feat)
Is emitted, whenever the current edit selection has been changed.
QgsPointXY mapToLayerCoordinates(const QgsMapLayer *layer, QgsPointXY point) const
transform point coordinates from output CRS to layer's CRS
Represents a vector layer which manages a vector based data sets.
QString sortExpression() const
Gets the expression used for sorting.
void sortColumnChanged(int column, Qt::SortOrder order)
Is emitted whenever the sort column is changed.
static QgsMapLayerActionRegistry * mapLayerActionRegistry()
Returns the global map layer action registry, used for registering map layer actions.
void finished()
When filling the cache, this signal gets emitted once the cache is fully initialized.
void extentsChanged()
Emitted when the extents of the map change.
A generic dialog for building expression strings.
An action which can run on map layers.
int featureCount()
Returns the number of features on the layer.
QgsFeatureRequest & setFlags(QgsFeatureRequest::Flags flags)
Sets flags that affect how features will be fetched.