78#include <QDesktopServices>
88#include <QColorDialog>
91#include <QRegularExpressionValidator>
102 , mMessageBar( messageBar )
104 , mOriginalSubsetSQL( lyr->subsetString() )
107 connect( pbnQueryBuilder, &QPushButton::clicked,
this, &QgsVectorLayerProperties::pbnQueryBuilder_clicked );
108 connect( pbnIndex, &QPushButton::clicked,
this, &QgsVectorLayerProperties::pbnIndex_clicked );
110 connect( pbnUpdateExtents, &QPushButton::clicked,
this, &QgsVectorLayerProperties::pbnUpdateExtents_clicked );
111 connect( mButtonAddJoin, &QPushButton::clicked,
this, &QgsVectorLayerProperties::mButtonAddJoin_clicked );
112 connect( mButtonEditJoin, &QPushButton::clicked,
this, &QgsVectorLayerProperties::mButtonEditJoin_clicked );
113 connect( mJoinTreeWidget, &QTreeWidget::itemDoubleClicked,
this, &QgsVectorLayerProperties::mJoinTreeWidget_itemDoubleClicked );
114 connect( mButtonRemoveJoin, &QPushButton::clicked,
this, &QgsVectorLayerProperties::mButtonRemoveJoin_clicked );
115 connect( mButtonAddWmsDimension, &QPushButton::clicked,
this, &QgsVectorLayerProperties::mButtonAddWmsDimension_clicked );
116 connect( mButtonEditWmsDimension, &QPushButton::clicked,
this, &QgsVectorLayerProperties::mButtonEditWmsDimension_clicked );
117 connect( mWmsDimensionsTreeWidget, &QTreeWidget::itemDoubleClicked,
this, &QgsVectorLayerProperties::mWmsDimensionsTreeWidget_itemDoubleClicked );
118 connect( mButtonRemoveWmsDimension, &QPushButton::clicked,
this, &QgsVectorLayerProperties::mButtonRemoveWmsDimension_clicked );
119 connect( mSimplifyDrawingGroupBox, &QGroupBox::toggled,
this, &QgsVectorLayerProperties::mSimplifyDrawingGroupBox_toggled );
120 connect( buttonRemoveMetadataUrl, &QPushButton::clicked,
this, &QgsVectorLayerProperties::removeSelectedMetadataUrl );
121 connect( buttonAddMetadataUrl, &QPushButton::clicked,
this, &QgsVectorLayerProperties::addMetadataUrl );
122 connect( buttonBox, &QDialogButtonBox::helpRequested,
this, &QgsVectorLayerProperties::showHelp );
131 mBtnStyle =
new QPushButton( tr(
"Style" ),
this );
132 QMenu *menuStyle =
new QMenu(
this );
133 mActionLoadStyle =
new QAction( tr(
"Load Style…" ),
this );
136 mActionSaveStyle =
new QAction( tr(
"Save Current Style…" ),
this );
139 mActionSaveMultipleStyles =
new QAction( tr(
"Save Multiple Styles…" ),
this );
140 connect( mActionSaveMultipleStyles, &QAction::triggered,
this, &QgsVectorLayerProperties::saveMultipleStylesAs );
142 mSourceGroupBox->hide();
145 connect( menuStyle, &QMenu::aboutToShow,
this, &QgsVectorLayerProperties::aboutToShowStyleMenu );
146 buttonBox->addButton(
mBtnStyle, QDialogButtonBox::ResetRole );
160 mMapTipFieldComboBox->setLayer( lyr );
161 mDisplayExpressionWidget->setLayer( lyr );
162 mDisplayExpressionWidget->registerExpressionContextGenerator(
this );
165 connect( mMapTipInsertFieldButton, &QAbstractButton::clicked,
this, &QgsVectorLayerProperties::insertField );
166 connect( mMapTipInsertExpressionButton, &QAbstractButton::clicked,
this, &QgsVectorLayerProperties::insertOrEditExpression );
171 connect( mEnableMapTips, &QAbstractButton::toggled, mHtmlMapTipGroupBox, &QWidget::setEnabled );
174 QVBoxLayout *layout =
nullptr;
179 layout =
new QVBoxLayout( labelingFrame );
180 layout->setContentsMargins( 0, 0, 0, 0 );
182 labelingDialog->layout()->setContentsMargins( 0, 0, 0, 0 );
184 layout->addWidget( labelingDialog );
185 labelingFrame->setLayout( layout );
188 layout =
new QVBoxLayout( mMaskingFrame );
189 layout->setContentsMargins( 0, 0, 0, 0 );
190 mMaskingWidget =
new QgsMaskingWidget( mMaskingFrame );
191 mMaskingWidget->setLayer( mLayer );
192 mMaskingWidget->layout()->setContentsMargins( 0, 0, 0, 0 );
193 layout->addWidget( mMaskingWidget );
194 mMaskingFrame->setLayout( layout );
198 labelingDialog =
nullptr;
199 mOptsPage_Labels->setEnabled(
false );
200 mOptsPage_Masks->setEnabled(
false );
201 mGeomGroupBox->setEnabled(
false );
202 mGeomGroupBox->setVisible(
false );
203 mCrsGroupBox->setEnabled(
false );
204 mCrsGroupBox->setVisible(
false );
208 QVBoxLayout *actionLayout =
new QVBoxLayout( actionOptionsFrame );
209 actionLayout->setContentsMargins( 0, 0, 0, 0 );
211 mActionDialog->layout()->setContentsMargins( 0, 0, 0, 0 );
212 actionLayout->addWidget( mActionDialog );
215 mSourceFieldsPropertiesDialog->layout()->setContentsMargins( 0, 0, 0, 0 );
216 mSourceFieldsFrame->setLayout(
new QVBoxLayout( mSourceFieldsFrame ) );
217 mSourceFieldsFrame->layout()->setContentsMargins( 0, 0, 0, 0 );
218 mSourceFieldsFrame->layout()->addWidget( mSourceFieldsPropertiesDialog );
223 mAttributesFormPropertiesDialog->layout()->setContentsMargins( 0, 0, 0, 0 );
224 mAttributesFormFrame->setLayout(
new QVBoxLayout( mAttributesFormFrame ) );
225 mAttributesFormFrame->layout()->setContentsMargins( 0, 0, 0, 0 );
226 mAttributesFormFrame->layout()->addWidget( mAttributesFormPropertiesDialog );
229 QVBoxLayout *metadataLayout =
new QVBoxLayout( metadataFrame );
230 metadataLayout->setContentsMargins( 0, 0, 0, 0 );
232 mMetadataWidget->layout()->setContentsMargins( 0, 0, 0, 0 );
234 metadataLayout->addWidget( mMetadataWidget );
235 metadataFrame->setLayout( metadataLayout );
237 QVBoxLayout *temporalLayout =
new QVBoxLayout( temporalFrame );
238 temporalLayout->setContentsMargins( 0, 0, 0, 0 );
240 temporalLayout->addWidget( mTemporalWidget );
244 mBtnMetadata =
new QPushButton( tr(
"Metadata" ),
this );
245 QMenu *menuMetadata =
new QMenu(
this );
248 menuMetadata->addSeparator();
252 buttonBox->addButton(
mBtnMetadata, QDialogButtonBox::ResetRole );
254 mSelectionColorButton->setAllowOpacity(
true );
255 mSelectionColorButton->setColorDialogTitle( tr(
"Override Selection Color" ) );
261 connect( mRadioOverrideSelectionColor, &QRadioButton::toggled, mSelectionColorButton, &QWidget::setEnabled );
262 mSelectionColorButton->setEnabled(
false );
263 connect( mRadioOverrideSelectionSymbol, &QRadioButton::toggled, mSelectionSymbolButton, &QWidget::setEnabled );
281 mSelectionSymbolButton->setEnabled(
false );
282 mRadioDefaultSelectionColor->setChecked(
true );
292 pbnIndex->setEnabled(
false );
296 pbnIndex->setEnabled(
false );
297 pbnIndex->setText( tr(
"Spatial Index Exists" ) );
304 int encindex = cboProviderEncoding->findText( enc );
307 cboProviderEncoding->insertItem( 0, enc );
310 cboProviderEncoding->setCurrentIndex( encindex );
312 else if ( mLayer->
providerType() == QLatin1String(
"ogr" ) )
317 cboProviderEncoding->setEnabled(
false );
322 mDataSourceEncodingFrame->hide();
326 mCrsSelector->setCrs( mLayer->
crs() );
329 const QList< QgsVectorLayerJoinInfo > &joins = mLayer->
vectorJoins();
332 addJoinToTreeWidget( join );
337 QVBoxLayout *diagLayout =
new QVBoxLayout( mDiagramFrame );
338 diagLayout->setContentsMargins( 0, 0, 0, 0 );
340 diagramPropertiesDialog->layout()->setContentsMargins( 0, 0, 0, 0 );
342 diagLayout->addWidget( diagramPropertiesDialog );
343 mDiagramFrame->setLayout( diagLayout );
346 mLegendWidget->setMapCanvas(
mCanvas );
347 mLegendWidget->setLayer( mLayer );
348 mLegendConfigEmbeddedWidget->setLayer( mLayer );
351 mLayerShortNameLineEdit->setText( mLayer->
shortName() );
354 mLayerShortNameLineEdit->setValidator( shortNameValidator );
357 mLayerTitleLineEdit->setText( mLayer->
title() );
358 mLayerAbstractTextEdit->setPlainText( mLayer->
abstract() );
359 mLayerKeywordListLineEdit->setText( mLayer->
keywordList() );
360 mLayerDataUrlLineEdit->setText( mLayer->
dataUrl() );
361 mLayerDataUrlFormatComboBox->setCurrentIndex(
362 mLayerDataUrlFormatComboBox->findText(
367 mLayerAttributionLineEdit->setText( mLayer->
attribution() );
368 mLayerAttributionUrlLineEdit->setText( mLayer->
attributionUrl() );
371 tableViewMetadataUrl->setSelectionMode( QAbstractItemView::SingleSelection );
372 tableViewMetadataUrl->setSelectionBehavior( QAbstractItemView::SelectRows );
373 tableViewMetadataUrl->horizontalHeader()->setStretchLastSection(
true );
374 tableViewMetadataUrl->horizontalHeader()->setSectionResizeMode( QHeaderView::Stretch );
376 mMetadataUrlModel =
new QStandardItemModel( tableViewMetadataUrl );
377 mMetadataUrlModel->clear();
378 mMetadataUrlModel->setColumnCount( 3 );
379 QStringList metadataUrlHeaders;
380 metadataUrlHeaders << tr(
"URL" ) << tr(
"Type" ) << tr(
"Format" );
381 mMetadataUrlModel->setHorizontalHeaderLabels( metadataUrlHeaders );
382 tableViewMetadataUrl->setModel( mMetadataUrlModel );
383 tableViewMetadataUrl->setItemDelegate(
new MetadataUrlItemDelegate(
this ) );
388 const int row = mMetadataUrlModel->rowCount();
389 mMetadataUrlModel->setItem( row, 0,
new QStandardItem( metaUrl.url ) );
390 mMetadataUrlModel->setItem( row, 1,
new QStandardItem( metaUrl.type ) );
391 mMetadataUrlModel->setItem( row, 2,
new QStandardItem( metaUrl.format ) );
395 mLayerLegendUrlLineEdit->setText( mLayer->
legendUrl() );
396 mLayerLegendUrlFormatComboBox->setCurrentIndex(
397 mLayerLegendUrlFormatComboBox->findText(
404 const QList<QgsMapLayerServerProperties::WmsDimensionInfo> &wmsDims = serverProperties->
wmsDimensions();
407 addWmsDimensionInfoToTreeWidget( dim );
411 myStyle.append( QStringLiteral(
"body { margin: 10px; }\n " ) );
412 teMetadataViewer->clear();
413 teMetadataViewer->document()->setDefaultStyleSheet( myStyle );
414 teMetadataViewer->setHtml( htmlMetadata() );
415 teMetadataViewer->setOpenLinks(
false );
417 mMetadataFilled =
true;
422 if ( !settings.
contains( QStringLiteral(
"/Windows/VectorLayerProperties/tab" ) ) )
424 settings.
setValue( QStringLiteral(
"Windows/VectorLayerProperties/tab" ),
428 QList<QgsMapLayer *> dependencySources;
429 const QSet<QgsMapLayerDependency> constDependencies = mLayer->
dependencies();
434 dependencySources << layer;
440 connect(
QgsProject::instance(), &QObject::destroyed,
this, [ = ] {mLayersDependenciesTreeView->setModel(
nullptr );} );
441 mLayersDependenciesTreeView->setModel( mLayersDependenciesTreeModel );
443 mRefreshSettingsWidget->setLayer( mLayer );
446 QMenu *menu =
new QMenu(
this );
448 mAuxiliaryLayerActionNew =
new QAction( tr(
"Create" ),
this );
449 menu->addAction( mAuxiliaryLayerActionNew );
450 connect( mAuxiliaryLayerActionNew, &QAction::triggered,
this, &QgsVectorLayerProperties::onAuxiliaryLayerNew );
452 mAuxiliaryLayerActionClear =
new QAction( tr(
"Clear" ),
this );
453 menu->addAction( mAuxiliaryLayerActionClear );
454 connect( mAuxiliaryLayerActionClear, &QAction::triggered,
this, &QgsVectorLayerProperties::onAuxiliaryLayerClear );
456 mAuxiliaryLayerActionDelete =
new QAction( tr(
"Delete" ),
this );
457 menu->addAction( mAuxiliaryLayerActionDelete );
458 connect( mAuxiliaryLayerActionDelete, &QAction::triggered,
this, &QgsVectorLayerProperties::onAuxiliaryLayerDelete );
460 mAuxiliaryLayerActionExport =
new QAction( tr(
"Export" ),
this );
461 menu->addAction( mAuxiliaryLayerActionExport );
464 mAuxiliaryStorageActions->setMenu( menu );
466 connect( mAuxiliaryStorageFieldsDeleteBtn, &QPushButton::clicked,
this, &QgsVectorLayerProperties::onAuxiliaryLayerDeleteField );
467 connect( mAuxiliaryStorageFieldsAddBtn, &QPushButton::clicked,
this, &QgsVectorLayerProperties::onAuxiliaryLayerAddField );
469 updateAuxiliaryStoragePage();
471 mOptsPage_Information->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#information-properties" ) );
472 mOptsPage_Source->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#source-properties" ) );
473 mOptsPage_Style->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#symbology-properties" ) );
474 mOptsPage_Labels->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#labels-properties" ) );
475 mOptsPage_Masks->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#masks-properties" ) );
476 mOptsPage_Diagrams->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#diagrams-properties" ) );
477 mOptsPage_SourceFields->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#fields-properties" ) );
478 mOptsPage_AttributesForm->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#attributes-form-properties" ) );
479 mOptsPage_Joins->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#joins-properties" ) );
480 mOptsPage_AuxiliaryStorage->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#auxiliary-storage-properties" ) );
481 mOptsPage_Actions->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#actions-properties" ) );
482 mOptsPage_Display->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#display-properties" ) );
483 mOptsPage_Rendering->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#rendering-properties" ) );
484 mOptsPage_Temporal->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#temporal-properties" ) );
485 mOptsPage_Variables->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#variables-properties" ) );
486 mOptsPage_Metadata->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#metadata-properties" ) );
487 mOptsPage_DataDependencies->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#dependencies-properties" ) ) ;
488 mOptsPage_Legend->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#legend-properties" ) );
489 mOptsPage_Server->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#qgis-server-properties" ) );
497void QgsVectorLayerProperties::toggleEditing()
502 emit toggleEditing( mLayer );
504 setPbnQueryBuilderEnabled();
507void QgsVectorLayerProperties::insertField()
511 if ( mMapTipFieldComboBox->currentField().isEmpty() )
513 QString expression = QStringLiteral(
"[%\"" );
514 expression += mMapTipFieldComboBox->currentField();
515 expression += QLatin1String(
"\"%]" );
517 mMapTipWidget->insertText( expression );
520void QgsVectorLayerProperties::insertOrEditExpression()
523 int selectionStart = mMapTipWidget->selectionStart();
524 int selectionEnd = mMapTipWidget->selectionEnd();
530 exprDlg.setWindowTitle( tr(
"Insert Expression" ) );
531 if ( exprDlg.exec() == QDialog::Accepted && !exprDlg.expressionText().trimmed().isEmpty() )
532 mMapTipWidget->insertText(
"[%" + exprDlg.expressionText().trimmed() +
"%]" );
534 mMapTipWidget->setLinearSelection( selectionStart, selectionEnd );
537void QgsVectorLayerProperties::addMetadataUrl()
539 const int row = mMetadataUrlModel->rowCount();
540 mMetadataUrlModel->setItem( row, 0,
new QStandardItem( QLatin1String() ) );
541 mMetadataUrlModel->setItem( row, 1,
new QStandardItem( QLatin1String() ) );
542 mMetadataUrlModel->setItem( row, 2,
new QStandardItem( QLatin1String() ) );
545void QgsVectorLayerProperties::removeSelectedMetadataUrl()
547 const QModelIndexList selectedRows = tableViewMetadataUrl->selectionModel()->selectedRows();
548 if ( selectedRows.empty() )
550 mMetadataUrlModel->removeRow( selectedRows[0].row() );
555 if ( !mSourceWidget )
560 QHBoxLayout *layout =
new QHBoxLayout();
561 layout->addWidget( mSourceWidget );
562 mSourceGroupBox->setLayout( layout );
564 mSourceGroupBox->setTitle( mSourceWidget->
groupTitle() );
566 mSourceGroupBox->show();
570 buttonBox->button( QDialogButtonBox::Apply )->setEnabled( isValid );
571 buttonBox->button( QDialogButtonBox::Ok )->setEnabled( isValid );
580 mLayerOrigNameLineEdit->setText( mLayer->
name() );
581 mBackupCrs = mLayer->
crs();
584 mSubsetGroupBox->setEnabled(
true );
591 txtSubsetSQL->setReadOnly(
true );
592 txtSubsetSQL->setCaretWidth( 0 );
593 txtSubsetSQL->setCaretLineVisible(
false );
594 setPbnQueryBuilderEnabled();
598 mSubsetGroupBox->hide();
608 mScaleRangeWidget->setMapCanvas(
mCanvas );
611 mReferenceScaleWidget->setShowCurrentScaleButton(
true );
612 mReferenceScaleWidget->setMapCanvas(
mCanvas );
613 if ( mUseReferenceScaleGroupBox->isChecked() )
621 mSimplifyDrawingSpinBox->setValue( simplifyMethod.
threshold() );
622 mSimplifyDrawingSpinBox->setClearValue( 1.0 );
627 mSelectionColorButton->setColor( selectionProperties->
selectionColor() );
631 mSelectionSymbolButton->setSymbol( symbol->clone() );
636 mRadioDefaultSelectionColor->setChecked(
true );
643 mRadioOverrideSelectionColor->setChecked(
true );
647 mRadioDefaultSelectionColor->setChecked(
true );
655 mRadioOverrideSelectionSymbol->setChecked(
true );
659 mRadioDefaultSelectionColor->setChecked(
true );
664 QString remark = QStringLiteral(
" (%1)" ).arg( tr(
"Not supported" ) );
668 mSimplifyDrawingAtProvider->setChecked(
false );
669 mSimplifyDrawingAtProvider->setEnabled(
false );
670 if ( !mSimplifyDrawingAtProvider->text().endsWith( remark ) )
671 mSimplifyDrawingAtProvider->setText( mSimplifyDrawingAtProvider->text().append( remark ) );
676 mSimplifyDrawingAtProvider->setEnabled( mSimplifyDrawingGroupBox->isChecked() );
677 if ( mSimplifyDrawingAtProvider->text().endsWith( remark ) )
679 QString newText = mSimplifyDrawingAtProvider->text();
680 newText.chop( remark.size() );
681 mSimplifyDrawingAtProvider->setText( newText );
688 mSimplifyDrawingGroupBox->setChecked(
false );
689 mSimplifyDrawingGroupBox->setEnabled(
false );
696 mSimplifyAlgorithmComboBox->setCurrentIndex( mSimplifyAlgorithmComboBox->findData( simplifyMethod.
simplifyAlgorithm() ) );
699 myScalesList.append( QStringLiteral(
"1:1" ) );
700 mSimplifyMaximumScaleComboBox->updateScales( myScalesList );
701 mSimplifyMaximumScaleComboBox->setScale( simplifyMethod.
maximumScale() );
705 mRefreshSettingsWidget->syncToLayer();
713 updateSymbologyPage();
717 if ( labelingDialog )
720 mSourceFieldsPropertiesDialog->
init();
721 mAttributesFormPropertiesDialog->
init();
724 updateVariableEditor();
726 if ( diagramPropertiesDialog )
732 page->syncToLayer( mLayer );
739 mLegendWidget->setLayer( mLayer );
745 if ( labelingDialog )
749 mBackupCrs = mLayer->
crs();
751 mLegendWidget->applyToLayer();
752 mLegendConfigEmbeddedWidget->applyToLayer();
756 mMetadataFilled =
false;
759 if ( mMaskingWidget && mMaskingWidget->hasBeenPopulated() )
760 mMaskingWidget->apply();
765 mSubsetGroupBox->setEnabled(
true );
771 mMetadataFilled =
false;
794 const auto constActions = mActionDialog->
actions();
795 for (
const QgsAction &action : constActions )
802 QVector<QgsAttributeTableConfig::ColumnConfig> columns = attributeTableConfig.
columns();
804 for (
int i = 0; i < columns.size(); ++i )
816 mLayer->
setName( mLayerOrigNameLineEdit->text() );
818 mAttributesFormPropertiesDialog->
apply();
819 mSourceFieldsPropertiesDialog->
apply();
831 diagramPropertiesDialog->
apply();
840 if ( mLayer->
shortName() != mLayerShortNameLineEdit->text() )
841 mMetadataFilled =
false;
842 mLayer->
setShortName( mLayerShortNameLineEdit->text() );
844 if ( mLayer->
title() != mLayerTitleLineEdit->text() )
845 mMetadataFilled =
false;
846 mLayer->
setTitle( mLayerTitleLineEdit->text() );
848 if ( mLayer->
abstract() != mLayerAbstractTextEdit->toPlainText() )
849 mMetadataFilled =
false;
850 mLayer->
setAbstract( mLayerAbstractTextEdit->toPlainText() );
852 if ( mLayer->
keywordList() != mLayerKeywordListLineEdit->text() )
853 mMetadataFilled =
false;
856 if ( mLayer->
dataUrl() != mLayerDataUrlLineEdit->text() )
857 mMetadataFilled =
false;
858 mLayer->
setDataUrl( mLayerDataUrlLineEdit->text() );
860 if ( mLayer->
dataUrlFormat() != mLayerDataUrlFormatComboBox->currentText() )
861 mMetadataFilled =
false;
865 if ( mLayer->
attribution() != mLayerAttributionLineEdit->text() )
866 mMetadataFilled =
false;
869 if ( mLayer->
attributionUrl() != mLayerAttributionUrlLineEdit->text() )
870 mMetadataFilled =
false;
874 QList<QgsMapLayerServerProperties::MetadataUrl> metaUrls;
875 for (
int row = 0; row < mMetadataUrlModel->rowCount() ; row++ )
878 metaUrl.
url = mMetadataUrlModel->item( row, 0 )->text();
879 metaUrl.
type = mMetadataUrlModel->item( row, 1 )->text();
880 metaUrl.
format = mMetadataUrlModel->item( row, 2 )->text();
881 metaUrls.append( metaUrl );
882 mMetadataFilled =
false;
887 if ( mLayer->
legendUrl() != mLayerLegendUrlLineEdit->text() )
888 mMetadataFilled =
false;
889 mLayer->
setLegendUrl( mLayerLegendUrlLineEdit->text() );
891 if ( mLayer->
legendUrlFormat() != mLayerLegendUrlFormatComboBox->currentText() )
892 mMetadataFilled =
false;
897 if ( mSimplifyDrawingGroupBox->isChecked() )
905 simplifyMethod.
setThreshold( mSimplifyDrawingSpinBox->value() );
907 simplifyMethod.
setMaximumScale( mSimplifyMaximumScaleComboBox->scale() );
917 if ( mSelectionColorButton->color() != mSelectionColorButton->defaultColor() )
921 if (
QgsSymbol *symbol = mSelectionSymbolButton->symbol() )
924 if ( mRadioOverrideSelectionSymbol->isChecked() )
928 else if ( mRadioOverrideSelectionColor->isChecked() )
937 mRefreshSettingsWidget->saveToLayer();
940 mLayer->
setRefreshOnNofifyMessage( mNotificationMessageCheckBox->isChecked() ? mNotifyMessagValueLineEdit->text() : QString() );
946 updateVariableEditor();
949 QSet<QgsMapLayerDependency> deps;
950 const auto checkedLayers = mLayersDependenciesTreeModel->
checkedLayers();
955 QMessageBox::warning(
nullptr, tr(
"Save Dependency" ), tr(
"This configuration introduces a cycle in data dependencies and will be ignored." ) );
966 const QString newSource = mSourceWidget->
sourceUri();
967 if ( newSource != mLayer->
source() )
981 mProjectDirtyBlocker.reset();
994 const auto constVectorJoins = mLayer->
vectorJoins();
1016 if ( backupCrs != mLayer->
crs() )
1017 mLayer->
setCrs( backupCrs );
1021void QgsVectorLayerProperties::pbnQueryBuilder_clicked()
1030 if ( dialog->exec() )
1044void QgsVectorLayerProperties::pbnIndex_clicked()
1049 setCursor( Qt::WaitCursor );
1051 setCursor( Qt::ArrowCursor );
1054 pbnIndex->setEnabled(
false );
1055 pbnIndex->setText( tr(
"Spatial Index Exists" ) );
1056 QMessageBox::information(
this, tr(
"Spatial Index" ), tr(
"Creation of spatial index successful" ) );
1060 QMessageBox::warning(
this, tr(
"Spatial Index" ), tr(
"Creation of spatial index failed" ) );
1065QString QgsVectorLayerProperties::htmlMetadata()
1075 mMetadataFilled =
false;
1079void QgsVectorLayerProperties::saveMultipleStylesAs()
1082 dlg.setSaveOnlyCurrentStyle(
false );
1091 const QListWidget *stylesWidget { dlg.stylesWidget() };
1094 QStringList stylesSelected;
1095 for (
int i = 0; i < stylesWidget->count(); i++ )
1097 if ( stylesWidget->item( i )->checkState() == Qt::CheckState::Checked )
1099 stylesSelected.push_back( stylesWidget->item( i )->text() );
1103 if ( ! stylesSelected.isEmpty() )
1106 for (
const QString &styleName : std::as_const( stylesSelected ) )
1108 bool defaultLoadedFlag =
false;
1110 StyleType type = dlg.currentStyleType();
1118 const QString filePath { dlg.outputFilePath() };
1119 const QFileInfo fi { filePath };
1120 QString safePath { QString( filePath ).replace( fi.baseName(),
1122 if ( styleIndex > 0 && stylesSelected.count( ) > 1 )
1125 while ( QFile::exists( safePath ) )
1127 const QFileInfo fi { safePath };
1128 safePath = QString( safePath ).replace(
'.' + fi.completeSuffix(),
1129 QStringLiteral(
"_%1.%2" ).arg( QString::number( i ), fi.completeSuffix() ) );
1134 message = mLayer->
saveNamedStyle( safePath, defaultLoadedFlag, dlg.styleCategories() );
1136 message = mLayer->
saveSldStyle( safePath, defaultLoadedFlag );
1139 if ( defaultLoadedFlag )
1146 QMessageBox::information(
this, tr(
"Save Style" ), message );
1153 QString infoWindowTitle = QObject::tr(
"Save style '%1' to DB (%2)" )
1160 QString name { dbSettings.
name };
1161 if ( name.isEmpty() )
1167 name += QStringLiteral(
"_%1" ).arg( styleName );
1168 QStringList ids, names, descriptions;
1171 while ( names.contains( name ) )
1173 name = QStringLiteral(
"%1 %2" ).arg( name, QString::number( i ) );
1178 QString errorMessage;
1181 if ( QMessageBox::question(
nullptr, QObject::tr(
"Save style in database" ),
1182 QObject::tr(
"A matching style already exists in the database for this layer. Do you want to overwrite it?" ),
1183 QMessageBox::Yes | QMessageBox::No ) == QMessageBox::No )
1188 else if ( !errorMessage.isEmpty() )
1190 QMessageBox::warning(
this, infoWindowTitle, errorMessage );
1196 if ( !msgError.isNull() )
1198 QMessageBox::warning(
this, infoWindowTitle, msgError );
1202 QMessageBox::information(
this, infoWindowTitle, tr(
"Style '%1' saved" ).arg( styleName ) );
1217void QgsVectorLayerProperties::aboutToShowStyleMenu()
1220 QMenu *m = qobject_cast<QMenu *>( sender() );
1223 m->addAction( mActionLoadStyle );
1224 m->addAction( mActionSaveStyle );
1229 mActionSaveStyle->setText( tr(
"Save Current Style…" ) );
1230 m->addAction( mActionSaveMultipleStyles );
1234 mActionSaveStyle->setText( tr(
"Save Style…" ) );
1246void QgsVectorLayerProperties::mButtonAddJoin_clicked()
1251 QList<QgsMapLayer *> joinedLayers;
1252 const QList< QgsVectorLayerJoinInfo > &joins = mLayer->
vectorJoins();
1253 joinedLayers.reserve( joins.size() );
1254 for (
int i = 0; i < joins.size(); ++i )
1256 joinedLayers.append( joins[i].joinLayer() );
1260 if ( d.exec() == QDialog::Accepted )
1264 if ( d.createAttributeIndex() )
1273 addJoinToTreeWidget( info );
1274 setPbnQueryBuilderEnabled();
1275 mSourceFieldsPropertiesDialog->
init();
1276 mAttributesFormPropertiesDialog->
init();
1280void QgsVectorLayerProperties::mButtonEditJoin_clicked()
1282 QTreeWidgetItem *currentJoinItem = mJoinTreeWidget->currentItem();
1283 mJoinTreeWidget_itemDoubleClicked( currentJoinItem, 0 );
1286void QgsVectorLayerProperties::mJoinTreeWidget_itemDoubleClicked( QTreeWidgetItem *item,
int )
1288 if ( !mLayer || !item )
1293 QList<QgsMapLayer *> joinedLayers;
1294 QString joinLayerId = item->data( 0, Qt::UserRole ).toString();
1295 const QList< QgsVectorLayerJoinInfo > &joins = mLayer->
vectorJoins();
1297 for (
int i = 0; i < joins.size(); ++i )
1303 if ( joinLayer->
id() == joinLayerId )
1310 joinedLayers.append( joinLayer );
1319 d.setWindowTitle( tr(
"Edit Vector Join" ) );
1320 d.setJoinInfo( joins[j] );
1322 if ( d.exec() == QDialog::Accepted )
1328 int idx = mJoinTreeWidget->indexOfTopLevelItem( item );
1329 mJoinTreeWidget->takeTopLevelItem( idx );
1334 if ( d.createAttributeIndex() )
1343 addJoinToTreeWidget( info, idx );
1345 setPbnQueryBuilderEnabled();
1346 mSourceFieldsPropertiesDialog->
init();
1347 mAttributesFormPropertiesDialog->
init();
1351void QgsVectorLayerProperties::addJoinToTreeWidget(
const QgsVectorLayerJoinInfo &join,
const int insertIndex )
1353 QTreeWidgetItem *joinItem =
new QTreeWidgetItem();
1354 joinItem->setFlags( Qt::ItemIsEnabled );
1357 if ( !mLayer || !joinLayer )
1362 joinItem->setText( 0, tr(
"Join layer" ) );
1368 joinItem->setText( 1, joinLayer->
name() );
1370 QFont f = joinItem->font( 0 );
1372 joinItem->setFont( 0, f );
1373 joinItem->setFont( 1, f );
1375 joinItem->setData( 0, Qt::UserRole, join.
joinLayerId() );
1377 QTreeWidgetItem *childJoinField =
new QTreeWidgetItem();
1378 childJoinField->setText( 0, tr(
"Join field" ) );
1380 childJoinField->setFlags( Qt::ItemIsEnabled );
1381 joinItem->addChild( childJoinField );
1383 QTreeWidgetItem *childTargetField =
new QTreeWidgetItem();
1384 childTargetField->setText( 0, tr(
"Target field" ) );
1386 joinItem->addChild( childTargetField );
1388 QTreeWidgetItem *childMemCache =
new QTreeWidgetItem();
1389 childMemCache->setText( 0, tr(
"Cache join layer in virtual memory" ) );
1391 childMemCache->setText( 1, QChar( 0x2714 ) );
1392 joinItem->addChild( childMemCache );
1394 QTreeWidgetItem *childDynForm =
new QTreeWidgetItem();
1395 childDynForm->setText( 0, tr(
"Dynamic form" ) );
1397 childDynForm->setText( 1, QChar( 0x2714 ) );
1398 joinItem->addChild( childDynForm );
1400 QTreeWidgetItem *childEditable =
new QTreeWidgetItem();
1401 childEditable->setText( 0, tr(
"Editable join layer" ) );
1403 childEditable->setText( 1, QChar( 0x2714 ) );
1404 joinItem->addChild( childEditable );
1406 QTreeWidgetItem *childUpsert =
new QTreeWidgetItem();
1407 childUpsert->setText( 0, tr(
"Upsert on edit" ) );
1409 childUpsert->setText( 1, QChar( 0x2714 ) );
1410 joinItem->addChild( childUpsert );
1412 QTreeWidgetItem *childCascade =
new QTreeWidgetItem();
1413 childCascade->setText( 0, tr(
"Delete cascade" ) );
1415 childCascade->setText( 1, QChar( 0x2714 ) );
1416 joinItem->addChild( childCascade );
1418 QTreeWidgetItem *childPrefix =
new QTreeWidgetItem();
1419 childPrefix->setText( 0, tr(
"Custom field name prefix" ) );
1420 childPrefix->setText( 1, join.
prefix() );
1421 joinItem->addChild( childPrefix );
1423 QTreeWidgetItem *childFields =
new QTreeWidgetItem();
1424 childFields->setText( 0, tr(
"Joined fields" ) );
1427 childFields->setText( 1, QLocale().toString( list->count() ) );
1429 childFields->setText( 1, tr(
"all" ) );
1430 joinItem->addChild( childFields );
1432 if ( insertIndex >= 0 )
1433 mJoinTreeWidget->insertTopLevelItem( insertIndex, joinItem );
1435 mJoinTreeWidget->addTopLevelItem( joinItem );
1437 mJoinTreeWidget->setCurrentItem( joinItem );
1438 mJoinTreeWidget->header()->setSectionResizeMode( QHeaderView::ResizeToContents );
1448 QDialog *dlg =
new QDialog();
1449 QString key = QStringLiteral(
"/UI/paneldialog/%1" ).arg( panel->
panelTitle() );
1451 dlg->restoreGeometry( settings.
value( key ).toByteArray() );
1453 dlg->setLayout(
new QVBoxLayout() );
1454 dlg->layout()->addWidget( panel );
1455 QDialogButtonBox *buttonBox =
new QDialogButtonBox( QDialogButtonBox::Ok );
1456 connect( buttonBox, &QDialogButtonBox::accepted, dlg, &QDialog::accept );
1457 dlg->layout()->addWidget( buttonBox );
1459 settings.
setValue( key, dlg->saveGeometry() );
1463void QgsVectorLayerProperties::mButtonRemoveJoin_clicked()
1465 QTreeWidgetItem *currentJoinItem = mJoinTreeWidget->currentItem();
1466 if ( !mLayer || !currentJoinItem )
1471 mLayer->
removeJoin( currentJoinItem->data( 0, Qt::UserRole ).toString() );
1472 mJoinTreeWidget->takeTopLevelItem( mJoinTreeWidget->indexOfTopLevelItem( currentJoinItem ) );
1473 setPbnQueryBuilderEnabled();
1474 mSourceFieldsPropertiesDialog->
init();
1475 mAttributesFormPropertiesDialog->
init();
1479void QgsVectorLayerProperties::mButtonAddWmsDimension_clicked()
1485 QStringList alreadyDefinedDimensions;
1487 const QList<QgsMapLayerServerProperties::WmsDimensionInfo> &dims = serverProperties->
wmsDimensions();
1490 alreadyDefinedDimensions << dim.name;
1494 if ( d.exec() == QDialog::Accepted )
1499 addWmsDimensionInfoToTreeWidget( info );
1503void QgsVectorLayerProperties::mButtonEditWmsDimension_clicked()
1505 QTreeWidgetItem *currentWmsDimensionItem = mWmsDimensionsTreeWidget->currentItem();
1506 mWmsDimensionsTreeWidget_itemDoubleClicked( currentWmsDimensionItem, 0 );
1509void QgsVectorLayerProperties::mWmsDimensionsTreeWidget_itemDoubleClicked( QTreeWidgetItem *item,
int )
1511 if ( !mLayer || !item )
1516 QString wmsDimName = item->data( 0, Qt::UserRole ).toString();
1518 const QList<QgsMapLayerServerProperties::WmsDimensionInfo> &dims = serverProperties->
wmsDimensions();
1519 QStringList alreadyDefinedDimensions;
1521 for (
int i = 0; i < dims.size(); ++i )
1523 QString dimName = dims[i].name;
1524 if ( dimName == wmsDimName )
1530 alreadyDefinedDimensions << dimName;
1539 d.setWindowTitle( tr(
"Edit WMS Dimension" ) );
1540 d.setInfo( dims[j] );
1542 if ( d.exec() == QDialog::Accepted )
1549 int idx = mWmsDimensionsTreeWidget->indexOfTopLevelItem( item );
1550 mWmsDimensionsTreeWidget->takeTopLevelItem( idx );
1554 addWmsDimensionInfoToTreeWidget( info, idx );
1560 QTreeWidgetItem *wmsDimensionItem =
new QTreeWidgetItem();
1561 wmsDimensionItem->setFlags( Qt::ItemIsEnabled );
1563 wmsDimensionItem->setText( 0, tr(
"Dimension" ) );
1564 wmsDimensionItem->setText( 1, wmsDim.
name );
1566 QFont f = wmsDimensionItem->font( 0 );
1568 wmsDimensionItem->setFont( 0, f );
1569 wmsDimensionItem->setFont( 1, f );
1571 wmsDimensionItem->setData( 0, Qt::UserRole, wmsDim.
name );
1573 QTreeWidgetItem *childWmsDimensionField =
new QTreeWidgetItem();
1574 childWmsDimensionField->setText( 0, tr(
"Field" ) );
1575 childWmsDimensionField->setText( 1, wmsDim.
fieldName );
1576 childWmsDimensionField->setFlags( Qt::ItemIsEnabled );
1577 wmsDimensionItem->addChild( childWmsDimensionField );
1579 QTreeWidgetItem *childWmsDimensionEndField =
new QTreeWidgetItem();
1580 childWmsDimensionEndField->setText( 0, tr(
"End field" ) );
1581 childWmsDimensionEndField->setText( 1, wmsDim.
endFieldName );
1582 childWmsDimensionEndField->setFlags( Qt::ItemIsEnabled );
1583 wmsDimensionItem->addChild( childWmsDimensionEndField );
1585 QTreeWidgetItem *childWmsDimensionUnits =
new QTreeWidgetItem();
1586 childWmsDimensionUnits->setText( 0, tr(
"Units" ) );
1587 childWmsDimensionUnits->setText( 1, wmsDim.
units );
1588 childWmsDimensionUnits->setFlags( Qt::ItemIsEnabled );
1589 wmsDimensionItem->addChild( childWmsDimensionUnits );
1591 QTreeWidgetItem *childWmsDimensionUnitSymbol =
new QTreeWidgetItem();
1592 childWmsDimensionUnitSymbol->setText( 0, tr(
"Unit symbol" ) );
1593 childWmsDimensionUnitSymbol->setText( 1, wmsDim.
unitSymbol );
1594 childWmsDimensionUnitSymbol->setFlags( Qt::ItemIsEnabled );
1595 wmsDimensionItem->addChild( childWmsDimensionUnitSymbol );
1597 QTreeWidgetItem *childWmsDimensionDefaultValue =
new QTreeWidgetItem();
1598 childWmsDimensionDefaultValue->setText( 0, tr(
"Default display" ) );
1600 childWmsDimensionDefaultValue->setFlags( Qt::ItemIsEnabled );
1601 wmsDimensionItem->addChild( childWmsDimensionDefaultValue );
1603 QTreeWidgetItem *childWmsDimensionRefValue =
new QTreeWidgetItem();
1604 childWmsDimensionRefValue->setText( 0, tr(
"Reference value" ) );
1605 childWmsDimensionRefValue->setText( 1, wmsDim.
referenceValue.toString() );
1606 childWmsDimensionRefValue->setFlags( Qt::ItemIsEnabled );
1607 wmsDimensionItem->addChild( childWmsDimensionRefValue );
1609 if ( insertIndex >= 0 )
1610 mWmsDimensionsTreeWidget->insertTopLevelItem( insertIndex, wmsDimensionItem );
1612 mWmsDimensionsTreeWidget->addTopLevelItem( wmsDimensionItem );
1614 mWmsDimensionsTreeWidget->setCurrentItem( wmsDimensionItem );
1615 mWmsDimensionsTreeWidget->header()->setSectionResizeMode( QHeaderView::ResizeToContents );
1618void QgsVectorLayerProperties::mButtonRemoveWmsDimension_clicked()
1620 QTreeWidgetItem *currentWmsDimensionItem = mWmsDimensionsTreeWidget->currentItem();
1621 if ( !mLayer || !currentWmsDimensionItem )
1627 serverProperties->
removeWmsDimension( currentWmsDimensionItem->data( 0, Qt::UserRole ).toString() );
1628 mWmsDimensionsTreeWidget->takeTopLevelItem( mWmsDimensionsTreeWidget->indexOfTopLevelItem( currentWmsDimensionItem ) );
1632void QgsVectorLayerProperties::updateSymbologyPage()
1636 delete mRendererDialog;
1637 mRendererDialog =
nullptr;
1653 mOptsPage_Style->setEnabled(
false );
1656 if ( mRendererDialog )
1658 mRendererDialog->layout()->setContentsMargins( 0, 0, 0, 0 );
1659 widgetStackRenderers->addWidget( mRendererDialog );
1660 widgetStackRenderers->setCurrentWidget( mRendererDialog );
1661 widgetStackRenderers->currentWidget()->layout()->setContentsMargins( 0, 0, 0, 0 );
1665void QgsVectorLayerProperties::setPbnQueryBuilderEnabled()
1667 pbnQueryBuilder->setEnabled( mLayer &&
1674 pbnQueryBuilder->setToolTip( tr(
"Stop editing mode to enable this." ) );
1679void QgsVectorLayerProperties::pbnUpdateExtents_clicked()
1682 mMetadataFilled =
false;
1689 if ( index ==
mOptStackedWidget->indexOf( mOptsPage_Information ) && ! mMetadataFilled )
1692 teMetadataViewer->clear();
1693 teMetadataViewer->setHtml( htmlMetadata() );
1694 mMetadataFilled =
true;
1699 mAttributesFormPropertiesDialog->
store();
1705void QgsVectorLayerProperties::mSimplifyDrawingGroupBox_toggled(
bool checked )
1710 mSimplifyDrawingAtProvider->setEnabled(
false );
1714 mSimplifyDrawingAtProvider->setEnabled( checked );
1718void QgsVectorLayerProperties::updateVariableEditor()
1721 mVariableEditor->setContext( &context );
1725 mVariableEditor->reloadContext();
1726 mVariableEditor->setEditableScopeIndex( 2 );
1729void QgsVectorLayerProperties::showHelp()
1731 const QVariant helpPage = mOptionsStackedWidget->currentWidget()->property(
"helpPage" );
1733 if ( helpPage.isValid() )
1739 QgsHelp::openHelp( QStringLiteral(
"working_with_vector/vector_properties.html" ) );
1743void QgsVectorLayerProperties::updateAuxiliaryStoragePage()
1750 mAuxiliaryStorageInformationGrpBox->setEnabled(
true );
1751 mAuxiliaryStorageFieldsGrpBox->setEnabled(
true );
1758 mAuxiliaryStorageFeaturesLineEdit->setText( QLocale().toString( features ) );
1761 mAuxiliaryLayerActionClear->setEnabled(
true );
1762 mAuxiliaryLayerActionDelete->setEnabled(
true );
1763 mAuxiliaryLayerActionExport->setEnabled(
true );
1764 mAuxiliaryLayerActionNew->setEnabled(
false );
1770 mAuxiliaryStorageFieldsLineEdit->setText( QLocale().toString( fields ) );
1773 mAuxiliaryStorageFieldsTree->clear();
1774 for (
const QgsField &field : alayer->auxiliaryFields() )
1777 QTreeWidgetItem *item =
new QTreeWidgetItem();
1779 item->setText( 0, prop.
origin() );
1780 item->setText( 1, prop.
name() );
1781 item->setText( 2, prop.
comment() );
1782 item->setText( 3, field.typeName() );
1783 item->setText( 4, field.name() );
1785 mAuxiliaryStorageFieldsTree->addTopLevelItem( item );
1791 mAuxiliaryStorageInformationGrpBox->setEnabled(
false );
1792 mAuxiliaryStorageFieldsGrpBox->setEnabled(
false );
1794 mAuxiliaryLayerActionClear->setEnabled(
false );
1795 mAuxiliaryLayerActionDelete->setEnabled(
false );
1796 mAuxiliaryLayerActionExport->setEnabled(
false );
1797 mAuxiliaryLayerActionNew->setEnabled(
true );
1799 mAuxiliaryStorageFieldsTree->clear();
1800 mAuxiliaryStorageKeyLineEdit->setText( QString() );
1801 mAuxiliaryStorageFieldsLineEdit->setText( QString() );
1802 mAuxiliaryStorageFeaturesLineEdit->setText( QString() );
1806void QgsVectorLayerProperties::onAuxiliaryLayerNew()
1814 if ( dlg.exec() == QDialog::Accepted )
1816 updateAuxiliaryStoragePage();
1820void QgsVectorLayerProperties::onAuxiliaryLayerClear()
1827 const QString msg = tr(
"Are you sure you want to clear auxiliary data for %1?" ).arg( mLayer->
name() );
1828 QMessageBox::StandardButton reply;
1829 reply = QMessageBox::question(
this,
"Clear Auxiliary Data", msg, QMessageBox::Yes | QMessageBox::No );
1831 if ( reply == QMessageBox::Yes )
1833 QApplication::setOverrideCursor( Qt::WaitCursor );
1835 QApplication::restoreOverrideCursor();
1836 updateAuxiliaryStoragePage();
1841void QgsVectorLayerProperties::onAuxiliaryLayerDelete()
1847 const QString msg = tr(
"Are you sure you want to delete auxiliary storage for %1?" ).arg( mLayer->
name() );
1848 QMessageBox::StandardButton reply;
1849 reply = QMessageBox::question(
this,
"Delete Auxiliary Storage", msg, QMessageBox::Yes | QMessageBox::No );
1851 if ( reply == QMessageBox::Yes )
1853 QApplication::setOverrideCursor( Qt::WaitCursor );
1866 QApplication::restoreOverrideCursor();
1867 updateAuxiliaryStoragePage();
1872void QgsVectorLayerProperties::onAuxiliaryLayerDeleteField()
1878 QList<QTreeWidgetItem *> items = mAuxiliaryStorageFieldsTree->selectedItems();
1879 if ( items.count() < 1 )
1883 const QTreeWidgetItem *item = items[0];
1886 def.
setName( item->text( 1 ) );
1896 const QString msg = tr(
"Are you sure you want to delete auxiliary field %1 for %2?" ).arg( item->text( 1 ), item->text( 0 ) );
1898 QMessageBox::StandardButton reply;
1899 const QString title = QObject::tr(
"Delete Auxiliary Field" );
1900 reply = QMessageBox::question(
this, title, msg, QMessageBox::Yes | QMessageBox::No );
1902 if ( reply == QMessageBox::Yes )
1904 QApplication::setOverrideCursor( Qt::WaitCursor );
1905 deleteAuxiliaryField( index );
1907 QApplication::restoreOverrideCursor();
1911void QgsVectorLayerProperties::onAuxiliaryLayerAddField()
1918 if ( dlg.exec() == QDialog::Accepted )
1920 updateAuxiliaryStoragePage();
1924void QgsVectorLayerProperties::deleteAuxiliaryField(
int index )
1937 if ( key >= 0 && def.
origin().compare(
"labeling", Qt::CaseInsensitive ) == 0
1944 updateAuxiliaryStoragePage();
1945 mSourceFieldsPropertiesDialog->
init();
1949 const QString title = QObject::tr(
"Delete Auxiliary Field" );
1951 const QString msg = QObject::tr(
"Unable to remove auxiliary field (%1)" ).arg( errors );
1959 if ( obj == mMapTipPreviewContainer && ev->type() == QEvent::Resize )
1963 return QgsOptionsDialogBase::eventFilter( obj, ev );
1966void QgsVectorLayerProperties::initMapTipPreview()
1969 mMapTipSplitter->setSizes( { 400, 200 } );
1971 mMapTipPreviewContainer->installEventFilter(
this );
1975 mMapTipPreview =
new QgsWebView( mMapTipPreviewContainer );
1978 mMapTipPreview->page()->setLinkDelegationPolicy( QWebPage::DelegateAllLinks );
1979 mMapTipPreview->setContextMenuPolicy( Qt::NoContextMenu );
1980 connect( mMapTipPreview, &QWebView::loadFinished,
this, &QgsVectorLayerProperties::resizeMapTip );
1983 mMapTipPreview->page()->settings()->setAttribute( QWebSettings::DeveloperExtrasEnabled,
true );
1984 mMapTipPreview->page()->settings()->setAttribute( QWebSettings::JavascriptEnabled,
true );
1985 mMapTipPreview->page()->settings()->setAttribute( QWebSettings::LocalStorageEnabled,
true );
1988 mMapTipPreview->page()->mainFrame()->setScrollBarPolicy( Qt::Horizontal, Qt::ScrollBarAlwaysOff );
1989 mMapTipPreview->page()->mainFrame()->setScrollBarPolicy( Qt::Vertical, Qt::ScrollBarAlwaysOff );
1992 connect( mMapTipWidget, &QgsCodeEditorHTML::textChanged,
this, &QgsVectorLayerProperties::updateMapTipPreview );
1996void QgsVectorLayerProperties::updateMapTipPreview()
1998 mMapTipPreview->setMaximumSize( mMapTipPreviewContainer->width(), mMapTipPreviewContainer->height() );
2000 mMapTipPreview->setHtml( htmlContent );
2003void QgsVectorLayerProperties::resizeMapTip()
2006 mMapTipPreview->setMaximumSize( mMapTipPreviewContainer->width(), mMapTipPreviewContainer->height() );
2009 const QWebElement container = mMapTipPreview->page()->mainFrame()->findFirstElement(
2010 QStringLiteral(
"#QgsWebViewContainer" ) );
2011 const int width = container.geometry().width();
2012 const int height = container.geometry().height();
2013 mMapTipPreview->resize( width, height );
2016 mMapTipPreview->move( ( mMapTipPreviewContainer->width() - mMapTipPreview->width() ) / 2,
2017 ( mMapTipPreviewContainer->height() - mMapTipPreview->height() ) / 2 );
2020 mMapTipPreview->adjustSize();
@ Present
A valid spatial index exists for the source.
@ Warning
Warning message.
static QString defaultProjectScales()
A string with default project scales.
@ CustomColor
Use default symbol with a custom selection color.
@ CustomSymbol
Use a custom symbol.
@ Default
Use default symbol and selection colors.
void clearActions()
Removes all actions.
QUuid addAction(Qgis::AttributeActionType type, const QString &name, const QString &command, bool capture=false)
Add an action with the given name and action details.
Utility class that encapsulates an action based on vector attributes.
static QString reportStyleSheet(QgsApplication::StyleSheetType styleSheetType=QgsApplication::StyleSheetType::Qt)
Returns a css style sheet for reports, the styleSheetType argument determines what type of stylesheet...
static QRegularExpression shortNameRegularExpression()
Returns the short name regular expression for line edit validator.
void init(const QgsActionManager &action, const QgsAttributeTableConfig &attributeTableConfig)
bool showWidgetInAttributeTable() const
QList< QgsAction > actions() const
QgsAttributeTableConfig::ActionWidgetStyle attributeTableWidgetStyle() const
This is a container for configuration of the attribute table.
@ Action
This column represents an action widget.
QVector< QgsAttributeTableConfig::ColumnConfig > columns() const
Gets the list with all columns and their configuration.
void update(const QgsFields &fields)
Update the configuration with the given fields.
void setActionWidgetStyle(ActionWidgetStyle actionWidgetStyle)
Set the style of the action widget.
void setColumns(const QVector< QgsAttributeTableConfig::ColumnConfig > &columns)
Set the list of columns visible in the attribute table.
Class allowing to manage the auxiliary storage for a vector layer.
static QString nameFromProperty(const QgsPropertyDefinition &def, bool joined=false)
Returns the name of the auxiliary field for a property definition.
static QgsPropertyDefinition propertyDefinitionFromField(const QgsField &field)
Returns the property definition from an auxiliary field.
bool clear()
Deletes all features from the layer.
bool deleteAttribute(int attr) override
Removes attribute from the layer and commits changes.
QgsFields auxiliaryFields() const
Returns a list of all auxiliary fields currently managed by the layer.
int propertyFromIndex(int index) const
Returns the underlying property key for the field index.
QgsVectorLayerJoinInfo joinInfo() const
Returns information to use for joining with primary key and so on.
QgsPropertyDefinition propertyDefinitionFromIndex(int index) const
Returns the property definition for the underlying field index.
static bool deleteTable(const QgsDataSourceUri &uri)
Removes a table from the auxiliary storage.
This class represents a coordinate reference system (CRS).
virtual bool supportsSubsetString() const
Returns true if the provider supports setting of subset strings.
Class for storing the component parts of a RDBMS data source URI (e.g.
void syncToLayer()
Updates the widget to reflect the layer's current diagram settings.
void auxiliaryFieldCreated()
A generic dialog for building expression strings.
static void setLayerVariables(QgsMapLayer *layer, const QVariantMap &variables)
Sets all layer context variables.
static QgsExpressionContextScope * projectScope(const QgsProject *project)
Creates a new scope which contains variables and functions relating to a QGIS project.
static QgsExpressionContextScope * atlasScope(const QgsLayoutAtlas *atlas)
Creates a new scope which contains variables and functions relating to a QgsLayoutAtlas.
static QgsExpressionContextScope * mapSettingsScope(const QgsMapSettings &mapSettings)
Creates a new scope which contains variables and functions relating to a QgsMapSettings object.
static QgsExpressionContextScope * layerScope(const QgsMapLayer *layer)
Creates a new scope which contains variables and functions relating to a QgsMapLayer.
static QgsExpressionContextScope * globalScope()
Creates a new scope which contains variables and functions relating to the global QGIS context.
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
static QString findAndSelectActiveExpression(QgsCodeEditor *editor, const QString &pattern=QString())
Find the expression under the cursor in the given editor and select it.
bool forceRasterRender() const
Returns whether the renderer must render as a raster.
void setForceRasterRender(bool forceRaster)
Sets whether the renderer should be rendered to a raster destination.
double referenceScale() const
Returns the symbology reference scale.
void setReferenceScale(double scale)
Sets the symbology reference scale.
virtual Qgis::SpatialIndexPresence hasSpatialIndex() const
Returns an enum value representing the presence of a valid spatial index on the source,...
Encapsulate a field in an attribute table or data source.
int indexFromName(const QString &fieldName) const
Gets the field index from the field name.
int indexOf(const QString &fieldName) const
Gets the field index from the field name.
int count() const
Returns number of items.
int size() const
Returns number of items.
static QString stringToSafeFilename(const QString &string)
Converts a string to a safe filename, replacing characters which are not safe for filenames with an '...
static QgsProviderSourceWidgetProviderRegistry * sourceWidgetProviderRegistry()
Returns the registry of provider source widget providers.
static QgsSubsetStringEditorProviderRegistry * subsetStringEditorProviderRegistry()
Returns the registry of subset string editors of data providers.
static void openHelp(const QString &key)
Opens help topic for the given help key using default system web browser.
Base class for "layer properties" dialogs, containing common utilities for handling functionality in ...
QPushButton * mBtnStyle
Style button.
void saveMetadataToFile()
Allows the user to save the layer's metadata as a file.
virtual void rollback()
Rolls back changes made to the layer.
void optionsStackedWidget_CurrentChanged(int index) override
StyleType
Style storage type.
QList< QgsMapLayerConfigWidget * > mConfigWidgets
Layer config widgets.
void setMetadataWidget(QgsMetadataWidget *widget, QWidget *page)
Sets the metadata widget and page associated with the dialog.
void loadDefaultStyle()
Reloads the default style for the layer.
void saveStyleAs()
Saves a style when appriate button is pressed.
void loadStyle()
Triggers a dialog to load a saved style.
QgsMapCanvas * mCanvas
Associated map canvas.
void loadDefaultMetadata()
Reloads the default layer metadata for the layer.
void loadMetadataFromFile()
Allows the user to load layer metadata from a file.
void saveDefaultStyle()
Saves the default style when appropriate button is pressed.
QPushButton * mBtnMetadata
Metadata button.
void initialize()
Initialize the dialog.
void saveMetadataAsDefault()
Saves the current layer metadata as the default for the layer.
void openUrl(const QUrl &url)
Handles opening a url from the dialog.
QgsLayerTreeFilterProxyModel is a sort filter proxy model to easily reproduce the legend/layer tree i...
QList< QgsMapLayer * > checkedLayers() const
Returns the checked layers.
void setLayerTreeModel(QgsLayerTreeModel *layerTreeModel)
Sets the layer tree model.
void setCheckedLayers(const QList< QgsMapLayer * > layers)
Initialize the list of checked layers.
The QgsLayerTreeModel class is model implementation for Qt item views framework.
Map canvas is a class for displaying all GIS data types on a canvas.
QColor selectionColor() const
Returns color for selected features.
double scale() const
Returns the last reported scale of the canvas.
const QgsMapSettings & mapSettings() const
Gets access to properties used for map rendering.
This class models dependencies with or between map layers.
The QgsMapLayerSaveStyleDialog class provides the UI to save the current style or multiple styles int...
Manages QGIS Server properties for a map layer.
void addStyleManagerActions(QMenu *m, QgsMapLayer *layer)
adds actions to the menu in accordance to the layer
static QgsMapLayerStyleGuiUtils * instance()
returns a singleton instance of this class
QString currentStyle() const
Returns name of the current style.
QStringList styles() const
Returns list of all defined style names.
bool setCurrentStyle(const QString &name)
Set a different style as the current style - will apply it to the layer.
void currentStyleChanged(const QString ¤tName)
Emitted when the current style has been changed.
Base class for all map layer types.
void setShortName(const QString &shortName)
Sets the short name of the layer used by QGIS Server to identify the layer.
QString legendUrlFormat() const
Returns the format for a URL based layer legend.
void setRefreshOnNotifyEnabled(bool enabled)
Set whether provider notification is connected to triggerRepaint.
void setAbstract(const QString &abstract)
Sets the abstract of the layer used by QGIS Server in GetCapabilities request.
virtual QString saveSldStyle(const QString &uri, bool &resultFlag) const
Saves the properties of this layer to an SLD format file.
QString source() const
Returns the source for the layer.
void setLegendUrl(const QString &legendUrl)
Sets the URL for the layer's legend.
QString providerType() const
Returns the provider type (provider key) for this layer.
void setMinimumScale(double scale)
Sets the minimum map scale (i.e.
QgsCoordinateReferenceSystem crs
QgsMapLayerServerProperties * serverProperties()
Returns QGIS Server Properties for the map layer.
QString attribution() const
Returns the attribution of the layer used by QGIS Server in GetCapabilities request.
virtual int listStylesInDatabase(QStringList &ids, QStringList &names, QStringList &descriptions, QString &msgError)
Lists all the style in db split into related to the layer and not related to.
QString id() const
Returns the layer's unique ID, which is used to access this layer from QgsProject.
void triggerRepaint(bool deferredUpdate=false)
Will advise the map canvas (and any other interested party) that this layer requires to be repainted.
void setAttributionUrl(const QString &attribUrl)
Sets the attribution URL of the layer used by QGIS Server in GetCapabilities request.
void setMaximumScale(double scale)
Sets the maximum map scale (i.e.
QgsLayerMetadata metadata
QString abstract() const
Returns the abstract of the layer used by QGIS Server in GetCapabilities request.
QString dataUrlFormat() const
Returns the DataUrl format of the layer used by QGIS Server in GetCapabilities request.
void setDataUrl(const QString &dataUrl)
Sets the DataUrl of the layer used by QGIS Server in GetCapabilities request.
void setKeywordList(const QString &keywords)
Sets the keyword list of the layer used by QGIS Server in GetCapabilities request.
void setAttribution(const QString &attrib)
Sets the attribution of the layer used by QGIS Server in GetCapabilities request.
bool isRefreshOnNotifyEnabled() const
Returns true if the refresh on provider nofification is enabled.
QString shortName() const
Returns the short name of the layer used by QGIS Server to identify the layer.
void setDataUrlFormat(const QString &dataUrlFormat)
Sets the DataUrl format of the layer used by QGIS Server in GetCapabilities request.
virtual void saveStyleToDatabase(const QString &name, const QString &description, bool useAsDefault, const QString &uiFileContent, QString &msgError, QgsMapLayer::StyleCategories categories=QgsMapLayer::AllStyleCategories)
Saves named and sld style of the layer to the style table in the db.
QString title() const
Returns the title of the layer used by QGIS Server in GetCapabilities request.
void setScaleBasedVisibility(bool enabled)
Sets whether scale based visibility is enabled for the layer.
QString dataUrl() const
Returns the DataUrl of the layer used by QGIS Server in GetCapabilities request.
bool hasScaleBasedVisibility() const
Returns whether scale based visibility is enabled for the layer.
void setRefreshOnNofifyMessage(const QString &message)
Set the notification message that triggers repaint If refresh on notification is enabled,...
void setName(const QString &name)
Set the display name of the layer.
QString refreshOnNotifyMessage() const
Returns the message that should be notified by the provider to triggerRepaint.
void setMapTipsEnabled(bool enabled)
Enable or disable map tips for this layer.
QString attributionUrl() const
Returns the attribution URL of the layer used by QGIS Server in GetCapabilities request.
void setDataSource(const QString &dataSource, const QString &baseName, const QString &provider, bool loadDefaultStyleFlag=false)
Updates the data source of the layer.
double minimumScale() const
Returns the minimum map scale (i.e.
QgsMapLayerStyleManager * styleManager() const
Gets access to the layer's style manager.
QString legendUrl() const
Returns the URL for the layer's legend.
void setLegendUrlFormat(const QString &legendUrlFormat)
Sets the format for a URL based layer legend.
virtual QString saveNamedStyle(const QString &uri, bool &resultFlag, StyleCategories categories=AllStyleCategories)
Save the properties of this layer as a named style (either as a .qml file on disk or as a record in t...
void setMapTipTemplate(const QString &mapTipTemplate)
The mapTip is a pretty, html representation for feature information.
double maximumScale() const
Returns the maximum map scale (i.e.
QString keywordList() const
Returns the keyword list of the layer used by QGIS Server in GetCapabilities request.
void setTitle(const QString &title)
Sets the title of the layer used by QGIS Server in GetCapabilities request.
void setCrs(const QgsCoordinateReferenceSystem &srs, bool emitSignal=true)
Sets layer's spatial reference system.
static QString vectorMapTipPreviewText(QgsMapLayer *layer, QgsMapCanvas *mapCanvas, const QString &mapTemplate, const QString &displayExpression)
Returns the html that would be displayed in a maptip for a given layer.
A bar for displaying non-blocking messages to the user.
void pushMessage(const QString &text, Qgis::MessageLevel level=Qgis::MessageLevel::Info, int duration=-1)
A convenience method for pushing a message with the specified text to the bar.
A dialog to create a new auxiliary field.
A dialog to create a new auxiliary layer.
void resizeAlltabs(int index)
Resizes all tabs when the dialog is resized.
QStackedWidget * mOptStackedWidget
void initOptionsBase(bool restoreUi=true, const QString &title=QString())
Set up the base ui connections for vertical tabs.
Property
Data definable properties.
static QgsProject * instance()
Returns the QgsProject singleton instance.
Q_INVOKABLE QgsMapLayer * mapLayer(const QString &layerId) const
Retrieve a pointer to a registered layer by layer ID.
void setDirty(bool b=true)
Flag the project as dirty (modified).
Definition for a property.
QString comment() const
Returns the comment of the property.
void setOrigin(const QString &origin)
Sets the origin of the property.
QString name() const
Returns the name of the property.
void setName(const QString &name)
Sets the name of the property.
QString origin() const
Returns the origin of the property.
void setComment(const QString &comment)
Sets comment of the property.
static QgsProviderRegistry * instance(const QString &pluginPath=QString())
Means of accessing canonical single instance.
void showPanel(QgsPanelWidget *panel)
Emit when you require a panel to be show in the interface.
void setContext(const QgsSymbolWidgetContext &context)
Sets the context in which the dialog is shown, e.g., the associated map canvas and expression context...
void apply()
Apply the changes from the dialog to the layer.
void layerVariablesChanged()
Emitted when expression context variables on the associated vector layers have been changed.
void widgetChanged()
Emitted when something on the widget has changed.
void setDockMode(bool dockMode)
Set the widget in dock mode which tells the widget to emit panel widgets and not open dialogs.
static QMap< int, QString > wmsDimensionDefaultDisplayLabels()
Returns WMS Dimension default display labels.
bool addWmsDimension(const QgsServerWmsDimensionProperties::WmsDimensionInfo &wmsDimInfo)
Adds a QGIS Server WMS Dimension.
bool removeWmsDimension(const QString &wmsDimName)
Removes a QGIS Server WMS Dimension.
const QList< QgsServerWmsDimensionProperties::WmsDimensionInfo > wmsDimensions() const
Returns the QGIS Server WMS Dimension list.
This class is a composition of two QSettings instances:
QVariant value(const QString &key, const QVariant &defaultValue=QVariant(), Section section=NoSection) const
Returns the value for setting key.
bool contains(const QString &key, QgsSettings::Section section=QgsSettings::NoSection) const
Returns true if there exists a setting called key; returns false otherwise.
void setValue(const QString &key, const QVariant &value, QgsSettings::Section section=QgsSettings::NoSection)
Sets the value of setting key to value.
static QgsStyle * defaultStyle(bool initialize=true)
Returns the default application-wide style.
Interface for a dialog that can edit subset strings.
virtual QString subsetString() const =0
Returns the subset string entered in the dialog.
virtual void setSubsetString(const QString &subsetString)=0
Sets a subset string into the dialog.
QgsSubsetStringEditorInterface * createDialog(QgsVectorLayer *layer, QWidget *parent=nullptr, Qt::WindowFlags fl=QgsGuiUtils::ModalDialogFlags)
Creates a new dialog to edit the subset string of the provided layer.
Contains settings which reflect the context in which a symbol (or renderer) widget is shown,...
void setMapCanvas(QgsMapCanvas *canvas)
Sets the map canvas associated with the widget.
void setMessageBar(QgsMessageBar *bar)
Sets the message bar associated with the widget.
Abstract base class for all rendered symbols.
This is the base class for vector data providers.
static QStringList availableEncodings()
Returns a list of available encodings.
@ SimplifyGeometries
Supports simplification of geometries on provider side according to a distance tolerance.
@ SelectEncoding
Allows user to select encoding.
@ CreateSpatialIndex
Allows creation of spatial index.
virtual bool createSpatialIndex()
Creates a spatial index on the datasource (if supported by the provider type).
virtual bool createAttributeIndex(int field)
Create an attribute index on the datasource.
QString encoding() const
Returns the encoding which is used for accessing data.
virtual Q_INVOKABLE QgsVectorDataProvider::Capabilities capabilities() const
Returns flags containing the supported capabilities.
Defines left outer join from our vector layer to some other vector layer.
bool hasCascadedDelete() const
Returns whether a feature deleted on the target layer has to impact the joined layer by deleting the ...
bool isDynamicFormEnabled() const
Returns whether the form has to be dynamically updated with joined fields when a feature is being cre...
bool hasUpsertOnEdit() const
Returns whether a feature created on the target layer has to impact the joined layer by creating a ne...
bool isEditable() const
Returns whether joined fields may be edited through the form of the target layer.
bool isUsingMemoryCache() const
Returns whether values from the joined layer should be cached in memory to speed up lookups.
QString prefix() const
Returns prefix of fields from the joined layer. If nullptr, joined layer's name will be used.
static QStringList joinFieldNamesSubset(const QgsVectorLayerJoinInfo &info, bool blocklisted=true)
Returns the list of field names to use for joining considering blocklisted fields and subset.
QString joinFieldName() const
Returns name of the field of joined layer that will be used for join.
QString targetFieldName() const
Returns name of the field of our layer that will be used for join.
QString joinLayerId() const
ID of the joined layer - may be used to resolve reference to the joined layer.
QgsVectorLayer * joinLayer() const
Returns joined layer (may be nullptr if the reference was set by layer ID and not resolved yet)
bool eventFilter(QObject *obj, QEvent *ev) override
QgsVectorLayerProperties(QgsMapCanvas *canvas, QgsMessageBar *messageBar, QgsVectorLayer *lyr=nullptr, QWidget *parent=nullptr, Qt::WindowFlags fl=QgsGuiUtils::ModalDialogFlags)
void optionsStackedWidget_CurrentChanged(int index) final
void toggleEditing(QgsMapLayer *)
void exportAuxiliaryLayer(QgsAuxiliaryLayer *layer)
Implementation of layer selection properties for vector layers.
void setSelectionSymbol(QgsSymbol *symbol)
Sets the symbol used to render selected features in the layer.
QgsSymbol * selectionSymbol() const
Returns the symbol used to render selected features in the layer.
Qgis::SelectionRenderingMode selectionRenderingMode() const
Returns the selection rendering mode to use for selected features in the layer.
QColor selectionColor() const
Returns the color to use for rendering selected features in the layer.
void setSelectionColor(const QColor &color)
Sets the color to use for rendering selected features in the layer.
void setSelectionRenderingMode(Qgis::SelectionRenderingMode mode)
Sets the selection rendering mode to use for selected features in the layer.
Represents a vector layer which manages a vector based data sets.
void setAuxiliaryLayer(QgsAuxiliaryLayer *layer=nullptr)
Sets the current auxiliary layer.
bool addJoin(const QgsVectorLayerJoinInfo &joinInfo)
Joins another vector layer to this layer.
QSet< QgsMapLayerDependency > dependencies() const FINAL
Gets the list of dependencies.
long long featureCount(const QString &legendKey) const
Number of features rendered with specified legend key.
void updateFields()
Will regenerate the fields property of this layer by obtaining all fields from the dataProvider,...
bool isSpatial() const FINAL
Returns true if this is a geometry layer and false in case of NoGeometry (table only) or UnknownGeome...
QString htmlMetadata() const FINAL
Obtain a formatted HTML string containing assorted metadata for this layer.
QgsFields fields() const FINAL
Returns the list of fields of this layer.
void setSimplifyMethod(const QgsVectorSimplifyMethod &simplifyMethod)
Sets the simplification settings for fast rendering of features.
QgsAuxiliaryLayer * auxiliaryLayer()
Returns the current auxiliary layer.
bool setDependencies(const QSet< QgsMapLayerDependency > &layers) FINAL
Sets the list of dependencies.
void setProviderEncoding(const QString &encoding)
Sets the text encoding of the data provider.
void setDisplayExpression(const QString &displayExpression)
Set the preview expression, used to create a human readable preview string.
bool removeJoin(const QString &joinLayerId)
Removes a vector layer join.
bool isEditable() const FINAL
Returns true if the provider is in editing mode.
QStringList commitErrors() const
Returns a list containing any error messages generated when attempting to commit changes to the layer...
virtual void updateExtents(bool force=false)
Update the extents for the layer.
QgsFeatureRenderer * renderer()
Returns the feature renderer used for rendering the features in the layer in 2D map views.
QString displayExpression
QgsVectorDataProvider * dataProvider() FINAL
Returns the layer's data provider, it may be nullptr.
QgsAttributeTableConfig attributeTableConfig() const
Returns the attribute table configuration object.
QgsActionManager * actions()
Returns all layer actions defined on this layer.
Q_INVOKABLE Qgis::GeometryType geometryType() const
Returns point, line or polygon.
void setAttributeTableConfig(const QgsAttributeTableConfig &attributeTableConfig)
Sets the attribute table configuration object.
virtual bool setSubsetString(const QString &subset)
Sets the string (typically sql) used to define a subset of the layer.
const QgsVectorSimplifyMethod & simplifyMethod() const
Returns the simplification settings for fast rendering of features.
const QList< QgsVectorLayerJoinInfo > vectorJoins() const
QgsMapLayerSelectionProperties * selectionProperties() override
Returns the layer's selection properties.
This class contains information how to simplify geometries fetched from a vector layer.
bool forceLocalOptimization() const
Gets where the simplification executes, after fetch the geometries from provider, or when supported,...
void setSimplifyHints(SimplifyHints simplifyHints)
Sets the simplification hints of the vector layer managed.
float maximumScale() const
Gets the maximum scale at which the layer should be simplified.
void setThreshold(float threshold)
Sets the simplification threshold of the vector layer managed.
void setSimplifyAlgorithm(SimplifyAlgorithm simplifyAlgorithm)
Sets the local simplification algorithm of the vector layer managed.
void setForceLocalOptimization(bool localOptimization)
Sets where the simplification executes, after fetch the geometries from provider, or when supported,...
SimplifyHints simplifyHints() const
Gets the simplification hints of the vector layer managed.
SimplifyAlgorithm simplifyAlgorithm() const
Gets the local simplification algorithm of the vector layer managed.
float threshold() const
Gets the simplification threshold of the vector layer managed.
@ GeometrySimplification
The geometries can be simplified using the current map2pixel context state.
@ AntialiasingSimplification
The geometries can be rendered with 'AntiAliasing' disabled because of it is '1-pixel size'.
@ NoSimplification
No simplification can be applied.
SimplifyAlgorithm
Types of local simplification algorithms that can be used.
@ Distance
The simplification uses the distance between points to remove duplicate points.
@ SnapToGrid
The simplification uses a grid (similar to ST_SnapToGrid) to remove duplicate points.
@ Visvalingam
The simplification gives each point in a line an importance weighting, so that least important points...
void setMaximumScale(float maximumScale)
Sets the maximum scale at which the layer should be simplified.
The QgsWebView class is a collection of stubs to mimic the API of QWebView on systems where the real ...
The QgsWmsDimensionDialog class provides an interface for WMS/OAPIF (WFS3) dimensions configuration A...
const QgsCoordinateReferenceSystem & crs
Setting options for creating vector data providers.
Setting to define QGIS Server WMS Dimension.