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 );
64 mMapCanvas = mapCanvas;
71 mEditorContext = context;
74 mTableView->horizontalHeader()->setContextMenuPolicy( Qt::CustomContextMenu );
75 connect( mTableView->horizontalHeader(), &QHeaderView::customContextMenuRequested,
this, &QgsDualView::showViewHeaderMenu );
80 initModels( mapCanvas, request, loadFeatures );
82 mConditionalFormatWidget->setLayer( mLayer );
84 mTableView->setModel( mFilterModel );
85 mFeatureList->setModel( mFeatureListModel );
86 delete mAttributeForm;
87 mAttributeForm =
new QgsAttributeForm( mLayer, mTempAttributeFormFeature, mEditorContext );
92 mAttributeEditorScrollArea->setWidgetResizable(
true );
93 mAttributeEditor->layout()->addWidget( mAttributeEditorScrollArea );
94 mAttributeEditorScrollArea->setWidget( mAttributeForm );
98 mAttributeEditor->layout()->addWidget( mAttributeForm );
107 if ( mFeatureListPreviewButton->defaultAction() )
108 mFeatureList->setDisplayExpression( mDisplayExpression );
118 void QgsDualView::columnBoxInit()
121 QList<QgsField> fields = mLayer->fields().toList();
123 QString defaultField;
126 QString displayExpression = mLayer->displayExpression();
128 if ( displayExpression.isEmpty() )
131 displayExpression = QStringLiteral(
"'[Please define preview text]'" );
134 mFeatureListPreviewButton->addAction( mActionExpressionPreview );
135 mFeatureListPreviewButton->addAction( mActionPreviewColumnsMenu );
137 Q_FOREACH (
const QgsField &field, fields )
139 int fieldIndex = mLayer->fields().lookupField( field.
name() );
140 if ( fieldIndex == -1 )
143 QString fieldName = field.
name();
146 QIcon icon = mLayer->fields().iconForField( fieldIndex );
147 QString text = mLayer->attributeDisplayName( fieldIndex );
150 QAction *previewAction =
new QAction( icon, text, mFeatureListPreviewButton );
151 connect( previewAction, &QAction::triggered,
this, [ = ] { previewColumnChanged( previewAction, fieldName ); } );
152 mPreviewColumnsMenu->addAction( previewAction );
154 if ( text == defaultField )
156 mFeatureListPreviewButton->setDefaultAction( previewAction );
161 QAction *sortByPreviewExpression =
new QAction(
QgsApplication::getThemeIcon( QStringLiteral(
"sort.svg" ) ), tr(
"Sort by preview expression" ),
this );
162 connect( sortByPreviewExpression, &QAction::triggered,
this, &QgsDualView::sortByPreviewExpression );
163 mFeatureListPreviewButton->addAction( sortByPreviewExpression );
165 QAction *separator =
new QAction( mFeatureListPreviewButton );
166 separator->setSeparator(
true );
167 mFeatureListPreviewButton->addAction( separator );
168 restoreRecentDisplayExpressions();
171 if ( !mFeatureListPreviewButton->defaultAction() )
173 mFeatureList->setDisplayExpression( displayExpression );
174 mFeatureListPreviewButton->setDefaultAction( mActionExpressionPreview );
175 setDisplayExpression( mFeatureList->displayExpression() );
179 mFeatureListPreviewButton->defaultAction()->trigger();
185 setCurrentIndex( view );
217 || ( mMasterModel->
rowCount() == 0 );
219 if ( !needsGeometry )
228 switch ( filterMode )
250 if ( requiresTableReload )
253 whileBlocking( mLayerCache )->setCacheGeometry( needsGeometry );
267 void QgsDualView::initLayerCache(
bool cacheGeometry )
271 int cacheSize = settings.
value( QStringLiteral(
"qgis/attributeTableRowCache" ),
"10000" ).toInt();
277 rebuildFullLayerCache();
283 delete mFeatureListModel;
304 connect( mMasterModel, &QgsAttributeTableModel::rowsRemoved, mFilterModel, &QgsAttributeTableFilterModel::invalidate );
305 connect( mMasterModel, &QgsAttributeTableModel::rowsInserted, mFilterModel, &QgsAttributeTableFilterModel::invalidate );
312 void QgsDualView::restoreRecentDisplayExpressions()
314 const QVariantList previewExpressions = mLayer->customProperty( QStringLiteral(
"dualview/previewExpressions" ) ).toList();
316 for (
const QVariant &previewExpression : previewExpressions )
317 insertRecentlyUsedDisplayExpression( previewExpression.toString() );
320 void QgsDualView::saveRecentDisplayExpressions()
const 326 QList<QAction *> actions = mFeatureListPreviewButton->actions();
329 int index = actions.indexOf( mLastDisplayExpressionAction );
332 QVariantList previewExpressions;
333 for ( ; index < actions.length(); ++index )
335 QAction *action = actions.at( index );
336 previewExpressions << action->property(
"previewExpression" );
339 mLayer->setCustomProperty( QStringLiteral(
"dualview/previewExpressions" ), previewExpressions );
343 void QgsDualView::setDisplayExpression(
const QString &expression )
345 mDisplayExpression = expression;
346 insertRecentlyUsedDisplayExpression( expression );
349 void QgsDualView::insertRecentlyUsedDisplayExpression(
const QString &expression )
351 QList<QAction *> actions = mFeatureListPreviewButton->actions();
354 int index = actions.indexOf( mLastDisplayExpressionAction );
357 for (
int i = 0; index + i < actions.length(); ++i )
359 QAction *action = actions.at( index );
360 if ( action->text() == expression || i >= 9 )
362 if ( action == mLastDisplayExpressionAction )
363 mLastDisplayExpressionAction =
nullptr;
364 mFeatureListPreviewButton->removeAction( action );
368 if ( !mLastDisplayExpressionAction )
369 mLastDisplayExpressionAction = action;
374 QString name = expression;
376 if ( expression.startsWith( QLatin1String(
"COALESCE( \"" ) ) && expression.endsWith( QLatin1String(
", '<NULL>' )" ) ) )
378 name = expression.mid( 11, expression.length() - 24 );
380 int fieldIndex = mLayer->fields().indexOf( name );
381 if ( fieldIndex != -1 )
383 name = mLayer->attributeDisplayName( fieldIndex );
384 icon = mLayer->fields().iconForField( fieldIndex );
392 QAction *previewAction =
new QAction( icon, name, mFeatureListPreviewButton );
393 previewAction->setProperty(
"previewExpression", expression );
394 connect( previewAction, &QAction::triggered,
this, [expression,
this](
bool )
396 setDisplayExpression( expression );
397 mFeatureListPreviewButton->setText( expression );
401 mFeatureListPreviewButton->insertAction( mLastDisplayExpressionAction, previewAction );
402 mLastDisplayExpressionAction = previewAction;
405 void QgsDualView::mFeatureList_aboutToChangeEditSelection(
bool &ok )
407 if ( mLayer->isEditable() && !mAttributeForm->
save() )
411 void QgsDualView::mFeatureList_currentEditSelectionChanged(
const QgsFeature &feat )
413 if ( !mAttributeForm )
415 mTempAttributeFormFeature = feat;
417 else if ( !mLayer->isEditable() || mAttributeForm->
save() )
430 mFeatureList->setCurrentFeatureEdited(
false );
431 mFeatureList->setEditSelection( fids );
436 return mAttributeForm->
save();
441 mConditionalFormatWidget->setVisible( !mConditionalFormatWidget->isVisible() );
442 mConditionalFormatWidget->viewRules();
466 void QgsDualView::previewExpressionBuilder()
472 dlg.setWindowTitle( tr(
"Expression Based Preview" ) );
475 if ( dlg.exec() == QDialog::Accepted )
477 mFeatureList->setDisplayExpression( dlg.expressionText() );
478 mFeatureListPreviewButton->setDefaultAction( mActionExpressionPreview );
479 mFeatureListPreviewButton->setPopupMode( QToolButton::MenuButtonPopup );
482 setDisplayExpression( mFeatureList->displayExpression() );
485 void QgsDualView::previewColumnChanged( QAction *previewAction,
const QString &expression )
487 if ( !mFeatureList->setDisplayExpression( QStringLiteral(
"COALESCE( \"%1\", '<NULL>' )" ).arg( expression ) ) )
489 QMessageBox::warning(
this,
490 tr(
"Column Preview" ),
491 tr(
"Could not set column '%1' as preview column.\nParser error:\n%2" )
492 .arg( previewAction->text(), mFeatureList->parserErrorString() )
497 mFeatureListPreviewButton->setText( previewAction->text() );
498 mFeatureListPreviewButton->setIcon( previewAction->icon() );
499 mFeatureListPreviewButton->setPopupMode( QToolButton::InstantPopup );
502 setDisplayExpression( mFeatureList->displayExpression() );
512 return mFilterModel->rowCount();
517 QAction *action = qobject_cast<QAction *>( sender() );
519 if ( action && action->data().isValid() && action->data().canConvert<QModelIndex>() )
521 QModelIndex index = action->data().toModelIndex();
523 QApplication::clipboard()->setText( var.toString() );
530 mProgressDlg->cancel();
536 saveRecentDisplayExpressions();
539 void QgsDualView::viewWillShowContextMenu( QMenu *menu,
const QModelIndex &atIndex )
546 QModelIndex sourceIndex = mFilterModel->
mapToSource( atIndex );
548 QAction *copyContentAction =
new QAction( tr(
"Copy Cell Content" ),
this );
549 copyContentAction->setData( QVariant::fromValue<QModelIndex>( sourceIndex ) );
550 menu->addAction( copyContentAction );
557 menu->addAction( tr(
"Zoom to Feature" ),
this, SLOT( zoomToCurrentFeature() ) );
558 menu->addAction( tr(
"Pan to Feature" ),
this, SLOT( panToCurrentFeature() ) );
559 menu->addAction( tr(
"Flash Feature" ),
this, SLOT( flashCurrentFeature() ) );
563 QList<QgsAction> actions = mLayer->actions()->actions( QStringLiteral(
"Field" ) );
564 if ( !actions.isEmpty() )
566 QAction *a = menu->addAction( tr(
"Run Layer Action" ) );
567 a->setEnabled(
false );
569 Q_FOREACH (
const QgsAction &action, actions )
578 #if QT_VERSION < QT_VERSION_CHECK(5, 6, 0) 579 menu->addAction( action.
name(), a, SLOT( execute() ) );
588 if ( !registeredActions.isEmpty() )
591 menu->addSeparator();
596 #if QT_VERSION < QT_VERSION_CHECK(5, 6, 0) 597 menu->addAction( action->text(), a, SLOT( execut() ) );
604 menu->addSeparator();
606 #if QT_VERSION < QT_VERSION_CHECK(5, 6, 0) 607 menu->addAction( tr(
"Open Form" ), a, SLOT( featureForm() ) );
614 void QgsDualView::widgetWillShowContextMenu(
QgsActionMenu *menu,
const QModelIndex &atIndex )
620 void QgsDualView::showViewHeaderMenu( QPoint point )
622 int col = mTableView->columnAt( point.x() );
624 delete mHorizontalHeaderMenu;
625 mHorizontalHeaderMenu =
new QMenu(
this );
627 QAction *hide =
new QAction( tr(
"&Hide Column" ), mHorizontalHeaderMenu );
628 connect( hide, &QAction::triggered,
this, &QgsDualView::hideColumn );
629 hide->setData( col );
630 mHorizontalHeaderMenu->addAction( hide );
631 QAction *setWidth =
new QAction( tr(
"&Set Width…" ), mHorizontalHeaderMenu );
632 connect( setWidth, &QAction::triggered,
this, &QgsDualView::resizeColumn );
633 setWidth->setData( col );
634 mHorizontalHeaderMenu->addAction( setWidth );
635 QAction *optimizeWidth =
new QAction( tr(
"&Autosize" ), mHorizontalHeaderMenu );
636 connect( optimizeWidth, &QAction::triggered,
this, &QgsDualView::autosizeColumn );
637 optimizeWidth->setData( col );
638 mHorizontalHeaderMenu->addAction( optimizeWidth );
640 mHorizontalHeaderMenu->addSeparator();
641 QAction *organize =
new QAction( tr(
"&Organize Columns…" ), mHorizontalHeaderMenu );
642 connect( organize, &QAction::triggered,
this, &QgsDualView::organizeColumns );
643 mHorizontalHeaderMenu->addAction( organize );
644 QAction *sort =
new QAction( tr(
"&Sort…" ), mHorizontalHeaderMenu );
645 connect( sort, &QAction::triggered,
this, &QgsDualView::modifySort );
646 mHorizontalHeaderMenu->addAction( sort );
648 mHorizontalHeaderMenu->popup( mTableView->horizontalHeader()->mapToGlobal( point ) );
651 void QgsDualView::organizeColumns()
659 if ( dialog.exec() == QDialog::Accepted )
666 void QgsDualView::tableColumnResized(
int column,
int width )
670 if ( sourceCol >= 0 && config.
columnWidth( sourceCol ) != width )
677 void QgsDualView::hideColumn()
679 QAction *action = qobject_cast<QAction *>( sender() );
680 int col = action->data().toInt();
683 if ( sourceCol >= 0 )
690 void QgsDualView::resizeColumn()
692 QAction *action = qobject_cast<QAction *>( sender() );
693 int col = action->data().toInt();
699 if ( sourceCol >= 0 )
702 int width = QInputDialog::getInt(
this, tr(
"Set column width" ), tr(
"Enter column width" ),
703 mTableView->columnWidth( col ),
713 void QgsDualView::autosizeColumn()
715 QAction *action = qobject_cast<QAction *>( sender() );
716 int col = action->data().toInt();
717 mTableView->resizeColumnToContents( col );
720 void QgsDualView::modifySort()
728 orderByDlg.setWindowTitle( tr(
"Configure Attribute Table Sort Order" ) );
729 QDialogButtonBox *dialogButtonBox =
new QDialogButtonBox( QDialogButtonBox::Ok | QDialogButtonBox::Cancel );
730 QGridLayout *layout =
new QGridLayout();
731 connect( dialogButtonBox, &QDialogButtonBox::accepted, &orderByDlg, &QDialog::accept );
732 connect( dialogButtonBox, &QDialogButtonBox::rejected, &orderByDlg, &QDialog::reject );
733 orderByDlg.setLayout( layout );
735 QGroupBox *sortingGroupBox =
new QGroupBox();
736 sortingGroupBox->setTitle( tr(
"Defined sort order in attribute table" ) );
737 sortingGroupBox->setCheckable(
true );
739 layout->addWidget( sortingGroupBox );
740 sortingGroupBox->setLayout(
new QGridLayout() );
745 expressionBuilder->
setLayer( mLayer );
747 expressionBuilder->
loadRecent( QStringLiteral(
"generic" ) );
750 sortingGroupBox->layout()->addWidget( expressionBuilder );
752 QCheckBox *cbxSortAscending =
new QCheckBox( tr(
"Sort ascending" ) );
753 cbxSortAscending->setChecked( config.
sortOrder() == Qt::AscendingOrder );
754 sortingGroupBox->layout()->addWidget( cbxSortAscending );
756 layout->addWidget( dialogButtonBox );
757 if ( orderByDlg.exec() )
759 Qt::SortOrder sortOrder = cbxSortAscending->isChecked() ? Qt::AscendingOrder : Qt::DescendingOrder;
760 if ( sortingGroupBox->isChecked() )
776 void QgsDualView::zoomToCurrentFeature()
778 QModelIndex currentIndex = mTableView->currentIndex();
779 if ( !currentIndex.isValid() )
785 ids.insert( mFilterModel->
rowToId( currentIndex ) );
793 void QgsDualView::panToCurrentFeature()
795 QModelIndex currentIndex = mTableView->currentIndex();
796 if ( !currentIndex.isValid() )
802 ids.insert( mFilterModel->
rowToId( currentIndex ) );
810 void QgsDualView::flashCurrentFeature()
812 QModelIndex currentIndex = mTableView->currentIndex();
813 if ( !currentIndex.isValid() )
819 ids.insert( mFilterModel->
rowToId( currentIndex ) );
827 void QgsDualView::rebuildFullLayerCache()
835 void QgsDualView::previewExpressionChanged(
const QString &expression )
837 mLayer->setDisplayExpression( expression );
840 void QgsDualView::onSortColumnChanged()
844 cfg.
sortOrder() != mFilterModel->sortOrder() )
852 void QgsDualView::sortByPreviewExpression()
854 Qt::SortOrder sortOrder = Qt::AscendingOrder;
857 sortOrder = mConfig.
sortOrder() == Qt::AscendingOrder ? Qt::DescendingOrder : Qt::AscendingOrder;
862 void QgsDualView::updateSelectedFeatures()
874 void QgsDualView::extentChanged()
887 void QgsDualView::featureFormAttributeChanged(
const QString &attribute,
const QVariant &value,
bool attributeChanged )
889 Q_UNUSED( attribute );
891 if ( attributeChanged )
892 mFeatureList->setCurrentFeatureEdited(
true );
907 mTableView->setFeatureSelectionManager( featureSelectionManager );
908 mFeatureList->setFeatureSelectionManager( featureSelectionManager );
910 if ( mFeatureSelectionManager && mFeatureSelectionManager->parent() == this )
911 delete mFeatureSelectionManager;
913 mFeatureSelectionManager = featureSelectionManager;
919 mConfig.
update( mLayer->fields() );
920 mLayer->setAttributeTableConfig( mConfig );
922 mTableView->setAttributeTableConfig( mConfig );
927 if ( sortExpression.isNull() )
928 mFilterModel->
sort( -1 );
930 mFilterModel->
sort( sortExpression, sortOrder );
942 void QgsDualView::progress(
int i,
bool &cancel )
946 mProgressDlg =
new QProgressDialog( tr(
"Loading features…" ), tr(
"Abort" ), 0, 0,
this );
947 mProgressDlg->setWindowTitle( tr(
"Attribute Table" ) );
948 mProgressDlg->setWindowModality( Qt::WindowModal );
949 mProgressDlg->show();
952 mProgressDlg->setLabelText( tr(
"%1 features loaded." ).arg( i ) );
953 QCoreApplication::processEvents();
955 cancel = mProgressDlg && mProgressDlg->wasCanceled();
958 void QgsDualView::finished()
961 mProgressDlg =
nullptr;
970 mDualView->masterModel()->executeAction( mAction, mFieldIdx );
976 editedIds << mDualView->masterModel()->rowToId( mFieldIdx.row() );
977 mDualView->setCurrentEditSelection( editedIds );
987 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
QgsAttributeTableConfig config() const
Get 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()
QSet< QgsFeatureId > QgsFeatureIds
QString sortExpression() const
Get the expression used for sorting the table and feature list.
This class contains context information for attribute editor widgets.
bool isEnabledOnlyWhenEditable() const
Return 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
Return 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...
QModelIndex index(int row, int column, const QModelIndex &parent=QModelIndex()) const override
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...
void selectionChanged(const QgsFeatureIds &selected, const QgsFeatureIds &deselected, const bool clearAndSelect)
This signal is emitted when selection was changed.
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()
Get 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.
Show only features which have unsaved changes.
const QgsFeatureRequest & request() const
Get 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
Get access to properties used for map rendering.
void setRequest(const QgsFeatureRequest &request)
Set the request.
QgsAttributeTableFilterModel::FilterMode filterMode()
Get the filter mode.
void modelChanged()
Model has been changed.
void setSelectedOnTop(bool selectedOnTop)
Toggle the selectedOnTop flag.
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)
Set 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.
QVariant value(const QString &key, const QVariant &defaultValue=QVariant(), const Section section=NoSection) const
Returns the value for setting key.
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 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
Get 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
Get 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)
Set flags that affect how features will be fetched.
void showContextMenuExternally(QgsActionMenu *menu, const QgsFeatureId fid)
Emitted when selecting context menu on the feature list to create the context menu individually...