38 #include <QMessageBox> 39 #include <QProgressDialog> 41 #include <QInputDialog> 44 : QStackedWidget( parent )
50 mConditionalFormatWidget->hide();
52 mPreviewColumnsMenu =
new QMenu(
this );
53 mActionPreviewColumnsMenu->setMenu( mPreviewColumnsMenu );
59 connect( mActionExpressionPreview, &QAction::triggered,
this, &QgsDualView::previewExpressionBuilder );
70 mEditorContext = context;
73 mTableView->horizontalHeader()->setContextMenuPolicy( Qt::CustomContextMenu );
74 connect( mTableView->horizontalHeader(), &QHeaderView::customContextMenuRequested,
this, &QgsDualView::showViewHeaderMenu );
79 initModels( mapCanvas, request, loadFeatures );
81 mConditionalFormatWidget->setLayer( mLayer );
83 mTableView->setModel( mFilterModel );
84 mFeatureList->setModel( mFeatureListModel );
85 delete mAttributeForm;
86 mAttributeForm =
new QgsAttributeForm( mLayer, mTempAttributeFormFeature, mEditorContext );
91 mAttributeEditorScrollArea->setWidgetResizable(
true );
92 mAttributeEditor->layout()->addWidget( mAttributeEditorScrollArea );
93 mAttributeEditorScrollArea->setWidget( mAttributeForm );
97 mAttributeEditor->layout()->addWidget( mAttributeForm );
106 if ( mFeatureListPreviewButton->defaultAction() )
107 mFeatureList->setDisplayExpression( mDisplayExpression );
114 mFeatureList->setEditSelection(
QgsFeatureIds() << mFeatureListModel->
idxToFid( mFeatureListModel->index( 0, 0 ) ) );
117 void QgsDualView::columnBoxInit()
120 QList<QgsField> fields = mLayer->fields().toList();
122 QString defaultField;
125 QString displayExpression = mLayer->displayExpression();
127 if ( displayExpression.isEmpty() )
130 displayExpression = QStringLiteral(
"'[Please define preview text]'" );
133 mFeatureListPreviewButton->addAction( mActionExpressionPreview );
134 mFeatureListPreviewButton->addAction( mActionPreviewColumnsMenu );
136 Q_FOREACH (
const QgsField &field, fields )
138 int fieldIndex = mLayer->fields().lookupField( field.
name() );
139 if ( fieldIndex == -1 )
142 QString fieldName = field.
name();
145 QIcon icon = mLayer->fields().iconForField( fieldIndex );
146 QString text = mLayer->attributeDisplayName( fieldIndex );
149 QAction *previewAction =
new QAction( icon, text, mFeatureListPreviewButton );
150 connect( previewAction, &QAction::triggered,
this, [ = ] { previewColumnChanged( previewAction, fieldName ); } );
151 mPreviewColumnsMenu->addAction( previewAction );
153 if ( text == defaultField )
155 mFeatureListPreviewButton->setDefaultAction( previewAction );
160 QAction *sortByPreviewExpression =
new QAction(
QgsApplication::getThemeIcon( QStringLiteral(
"sort.svg" ) ), tr(
"Sort by preview expression" ),
this );
161 connect( sortByPreviewExpression, &QAction::triggered,
this, &QgsDualView::sortByPreviewExpression );
162 mFeatureListPreviewButton->addAction( sortByPreviewExpression );
164 QAction *separator =
new QAction( mFeatureListPreviewButton );
165 separator->setSeparator(
true );
166 mFeatureListPreviewButton->addAction( separator );
167 restoreRecentDisplayExpressions();
170 if ( !mFeatureListPreviewButton->defaultAction() )
172 mFeatureList->setDisplayExpression( displayExpression );
173 mFeatureListPreviewButton->setDefaultAction( mActionExpressionPreview );
174 setDisplayExpression( mFeatureList->displayExpression() );
178 mFeatureListPreviewButton->defaultAction()->trigger();
184 setCurrentIndex( view );
216 || ( mMasterModel->
rowCount() == 0 );
218 if ( !needsGeometry )
227 switch ( filterMode )
249 if ( requiresTableReload )
252 whileBlocking( mLayerCache )->setCacheGeometry( needsGeometry );
266 void QgsDualView::initLayerCache(
bool cacheGeometry )
270 int cacheSize = settings.
value( QStringLiteral(
"qgis/attributeTableRowCache" ),
"10000" ).toInt();
276 rebuildFullLayerCache();
282 delete mFeatureListModel;
303 connect( mMasterModel, &QgsAttributeTableModel::rowsRemoved, mFilterModel, &QgsAttributeTableFilterModel::invalidate );
304 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 )
584 if ( !registeredActions.isEmpty() )
587 menu->addSeparator();
596 menu->addSeparator();
602 void QgsDualView::widgetWillShowContextMenu(
QgsActionMenu *menu,
const QModelIndex &atIndex )
608 void QgsDualView::showViewHeaderMenu( QPoint point )
610 int col = mTableView->columnAt( point.x() );
612 delete mHorizontalHeaderMenu;
613 mHorizontalHeaderMenu =
new QMenu(
this );
615 QAction *hide =
new QAction( tr(
"&Hide Column" ), mHorizontalHeaderMenu );
616 connect( hide, &QAction::triggered,
this, &QgsDualView::hideColumn );
617 hide->setData( col );
618 mHorizontalHeaderMenu->addAction( hide );
619 QAction *setWidth =
new QAction( tr(
"&Set Width…" ), mHorizontalHeaderMenu );
620 connect( setWidth, &QAction::triggered,
this, &QgsDualView::resizeColumn );
621 setWidth->setData( col );
622 mHorizontalHeaderMenu->addAction( setWidth );
623 QAction *optimizeWidth =
new QAction( tr(
"&Autosize" ), mHorizontalHeaderMenu );
624 connect( optimizeWidth, &QAction::triggered,
this, &QgsDualView::autosizeColumn );
625 optimizeWidth->setData( col );
626 mHorizontalHeaderMenu->addAction( optimizeWidth );
628 mHorizontalHeaderMenu->addSeparator();
629 QAction *organize =
new QAction( tr(
"&Organize Columns…" ), mHorizontalHeaderMenu );
630 connect( organize, &QAction::triggered,
this, &QgsDualView::organizeColumns );
631 mHorizontalHeaderMenu->addAction( organize );
632 QAction *sort =
new QAction( tr(
"&Sort…" ), mHorizontalHeaderMenu );
633 connect( sort, &QAction::triggered,
this, &QgsDualView::modifySort );
634 mHorizontalHeaderMenu->addAction( sort );
636 mHorizontalHeaderMenu->popup( mTableView->horizontalHeader()->mapToGlobal( point ) );
639 void QgsDualView::organizeColumns()
647 if ( dialog.exec() == QDialog::Accepted )
654 void QgsDualView::tableColumnResized(
int column,
int width )
658 if ( sourceCol >= 0 && config.
columnWidth( sourceCol ) != width )
665 void QgsDualView::hideColumn()
667 QAction *action = qobject_cast<QAction *>( sender() );
668 int col = action->data().toInt();
671 if ( sourceCol >= 0 )
678 void QgsDualView::resizeColumn()
680 QAction *action = qobject_cast<QAction *>( sender() );
681 int col = action->data().toInt();
687 if ( sourceCol >= 0 )
690 int width = QInputDialog::getInt(
this, tr(
"Set column width" ), tr(
"Enter column width" ),
691 mTableView->columnWidth( col ),
701 void QgsDualView::autosizeColumn()
703 QAction *action = qobject_cast<QAction *>( sender() );
704 int col = action->data().toInt();
705 mTableView->resizeColumnToContents( col );
708 void QgsDualView::modifySort()
716 orderByDlg.setWindowTitle( tr(
"Configure Attribute Table Sort Order" ) );
717 QDialogButtonBox *dialogButtonBox =
new QDialogButtonBox( QDialogButtonBox::Ok | QDialogButtonBox::Cancel );
718 QGridLayout *layout =
new QGridLayout();
719 connect( dialogButtonBox, &QDialogButtonBox::accepted, &orderByDlg, &QDialog::accept );
720 connect( dialogButtonBox, &QDialogButtonBox::rejected, &orderByDlg, &QDialog::reject );
721 orderByDlg.setLayout( layout );
723 QGroupBox *sortingGroupBox =
new QGroupBox();
724 sortingGroupBox->setTitle( tr(
"Defined sort order in attribute table" ) );
725 sortingGroupBox->setCheckable(
true );
727 layout->addWidget( sortingGroupBox );
728 sortingGroupBox->setLayout(
new QGridLayout() );
733 expressionBuilder->
setLayer( mLayer );
735 expressionBuilder->
loadRecent( QStringLiteral(
"generic" ) );
738 sortingGroupBox->layout()->addWidget( expressionBuilder );
740 QCheckBox *cbxSortAscending =
new QCheckBox( tr(
"Sort ascending" ) );
741 cbxSortAscending->setChecked( config.
sortOrder() == Qt::AscendingOrder );
742 sortingGroupBox->layout()->addWidget( cbxSortAscending );
744 layout->addWidget( dialogButtonBox );
745 if ( orderByDlg.exec() )
747 Qt::SortOrder sortOrder = cbxSortAscending->isChecked() ? Qt::AscendingOrder : Qt::DescendingOrder;
748 if ( sortingGroupBox->isChecked() )
764 void QgsDualView::zoomToCurrentFeature()
766 QModelIndex currentIndex = mTableView->currentIndex();
767 if ( !currentIndex.isValid() )
773 ids.insert( mFilterModel->
rowToId( currentIndex ) );
781 void QgsDualView::panToCurrentFeature()
783 QModelIndex currentIndex = mTableView->currentIndex();
784 if ( !currentIndex.isValid() )
790 ids.insert( mFilterModel->
rowToId( currentIndex ) );
798 void QgsDualView::flashCurrentFeature()
800 QModelIndex currentIndex = mTableView->currentIndex();
801 if ( !currentIndex.isValid() )
807 ids.insert( mFilterModel->
rowToId( currentIndex ) );
815 void QgsDualView::rebuildFullLayerCache()
823 void QgsDualView::previewExpressionChanged(
const QString &expression )
825 mLayer->setDisplayExpression( expression );
828 void QgsDualView::onSortColumnChanged()
832 cfg.
sortOrder() != mFilterModel->sortOrder() )
840 void QgsDualView::sortByPreviewExpression()
842 Qt::SortOrder sortOrder = Qt::AscendingOrder;
845 sortOrder = mConfig.
sortOrder() == Qt::AscendingOrder ? Qt::DescendingOrder : Qt::AscendingOrder;
850 void QgsDualView::updateSelectedFeatures()
862 void QgsDualView::extentChanged()
875 void QgsDualView::featureFormAttributeChanged(
const QString &attribute,
const QVariant &value,
bool attributeChanged )
877 Q_UNUSED( attribute );
879 if ( attributeChanged )
880 mFeatureList->setCurrentFeatureEdited(
true );
895 mTableView->setFeatureSelectionManager( featureSelectionManager );
896 mFeatureList->setFeatureSelectionManager( featureSelectionManager );
898 if ( mFeatureSelectionManager && mFeatureSelectionManager->parent() == this )
899 delete mFeatureSelectionManager;
901 mFeatureSelectionManager = featureSelectionManager;
907 mConfig.
update( mLayer->fields() );
908 mLayer->setAttributeTableConfig( mConfig );
910 mTableView->setAttributeTableConfig( mConfig );
915 if ( sortExpression.isNull() )
916 mFilterModel->
sort( -1 );
918 mFilterModel->
sort( sortExpression, sortOrder );
935 void QgsDualView::progress(
int i,
bool &cancel )
939 mProgressDlg =
new QProgressDialog( tr(
"Loading features…" ), tr(
"Abort" ), 0, 0,
this );
940 mProgressDlg->setWindowTitle( tr(
"Attribute Table" ) );
941 mProgressDlg->setWindowModality( Qt::WindowModal );
942 mProgressDlg->show();
945 mProgressDlg->setLabelText( tr(
"%1 features loaded." ).arg( i ) );
946 QCoreApplication::processEvents();
948 cancel = mProgressDlg && mProgressDlg->wasCanceled();
951 void QgsDualView::finished()
954 mProgressDlg =
nullptr;
963 mDualView->masterModel()->executeAction( mAction, mFieldIdx );
969 editedIds << mDualView->masterModel()->rowToId( mFieldIdx.row() );
970 mDualView->setCurrentEditSelection( editedIds );
980 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.
QSet< QgsFeatureId > QgsFeatureIds
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.
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.
Multi edit mode, for editing fields of multiple features at once.
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.
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...
bool isEditable() const FINAL
Returns true if the provider is in editing mode.
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.
QgsAttributeTableConfig attributeTableConfig() const
The config used for the attribute table.
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.
Single edit mode, for editing a single feature.
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.
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.
Form values are used for searching/filtering the layer.
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.
void formModeChanged(QgsAttributeEditorContext::Mode mode)
Emitted when the form changes mode.
QgsFeatureRequest & setFlags(QgsFeatureRequest::Flags flags)
Sets flags that affect how features will be fetched.