43 #include "qgsnative.h"
48 #include "qgsconfig.h"
80 #include <QDesktopServices>
81 #include <QMessageBox>
84 #include <QFileDialog>
86 #include <QFontDialog>
89 #include <QHeaderView>
90 #include <QColorDialog>
93 #include <QRegularExpressionValidator>
108 , mMessageBar( messageBar )
110 , mOriginalSubsetSQL( lyr->subsetString() )
113 connect( pbnQueryBuilder, &QPushButton::clicked,
this, &QgsVectorLayerProperties::pbnQueryBuilder_clicked );
114 connect( pbnIndex, &QPushButton::clicked,
this, &QgsVectorLayerProperties::pbnIndex_clicked );
116 connect( pbnUpdateExtents, &QPushButton::clicked,
this, &QgsVectorLayerProperties::pbnUpdateExtents_clicked );
117 connect( mButtonAddJoin, &QPushButton::clicked,
this, &QgsVectorLayerProperties::mButtonAddJoin_clicked );
118 connect( mButtonEditJoin, &QPushButton::clicked,
this, &QgsVectorLayerProperties::mButtonEditJoin_clicked );
119 connect( mJoinTreeWidget, &QTreeWidget::itemDoubleClicked,
this, &QgsVectorLayerProperties::mJoinTreeWidget_itemDoubleClicked );
120 connect( mButtonRemoveJoin, &QPushButton::clicked,
this, &QgsVectorLayerProperties::mButtonRemoveJoin_clicked );
121 connect( mButtonAddWmsDimension, &QPushButton::clicked,
this, &QgsVectorLayerProperties::mButtonAddWmsDimension_clicked );
122 connect( mButtonEditWmsDimension, &QPushButton::clicked,
this, &QgsVectorLayerProperties::mButtonEditWmsDimension_clicked );
123 connect( mWmsDimensionsTreeWidget, &QTreeWidget::itemDoubleClicked,
this, &QgsVectorLayerProperties::mWmsDimensionsTreeWidget_itemDoubleClicked );
124 connect( mButtonRemoveWmsDimension, &QPushButton::clicked,
this, &QgsVectorLayerProperties::mButtonRemoveWmsDimension_clicked );
125 connect( mSimplifyDrawingGroupBox, &QGroupBox::toggled,
this, &QgsVectorLayerProperties::mSimplifyDrawingGroupBox_toggled );
126 connect( buttonRemoveMetadataUrl, &QPushButton::clicked,
this, &QgsVectorLayerProperties::removeSelectedMetadataUrl );
127 connect( buttonAddMetadataUrl, &QPushButton::clicked,
this, &QgsVectorLayerProperties::addMetadataUrl );
128 connect( buttonBox, &QDialogButtonBox::helpRequested,
this, &QgsVectorLayerProperties::showHelp );
135 mBtnStyle =
new QPushButton( tr(
"Style" ),
this );
136 QMenu *menuStyle =
new QMenu(
this );
137 mActionLoadStyle =
new QAction( tr(
"Load Style…" ),
this );
138 connect( mActionLoadStyle, &QAction::triggered,
this, &QgsVectorLayerProperties::loadStyle );
140 mActionSaveStyle =
new QAction( tr(
"Save Current Style…" ),
this );
141 connect( mActionSaveStyle, &QAction::triggered,
this, &QgsVectorLayerProperties::saveStyleAs );
143 mActionSaveMultipleStyles =
new QAction( tr(
"Save Multiple Styles…" ),
this );
144 connect( mActionSaveMultipleStyles, &QAction::triggered,
this, &QgsVectorLayerProperties::saveMultipleStylesAs );
146 mSourceGroupBox->hide();
148 mBtnStyle->setMenu( menuStyle );
149 connect( menuStyle, &QMenu::aboutToShow,
this, &QgsVectorLayerProperties::aboutToShowStyleMenu );
150 buttonBox->addButton( mBtnStyle, QDialogButtonBox::ResetRole );
152 mBtnMetadata =
new QPushButton( tr(
"Metadata" ),
this );
153 QMenu *menuMetadata =
new QMenu(
this );
154 mActionLoadMetadata = menuMetadata->addAction( tr(
"Load Metadata…" ),
this, &QgsVectorLayerProperties::loadMetadata );
155 mActionSaveMetadataAs = menuMetadata->addAction( tr(
"Save Metadata…" ),
this, &QgsVectorLayerProperties::saveMetadataAs );
156 menuMetadata->addSeparator();
157 menuMetadata->addAction( tr(
"Save as Default" ),
this, &QgsVectorLayerProperties::saveDefaultMetadata );
158 menuMetadata->addAction( tr(
"Restore Default" ),
this, &QgsVectorLayerProperties::loadDefaultMetadata );
159 mBtnMetadata->setMenu( menuMetadata );
160 buttonBox->addButton( mBtnMetadata, QDialogButtonBox::ResetRole );
164 connect( buttonBox->button( QDialogButtonBox::Apply ), &QAbstractButton::clicked,
this, &QgsVectorLayerProperties::apply );
165 connect(
this, &QDialog::accepted,
this, &QgsVectorLayerProperties::apply );
166 connect(
this, &QDialog::rejected,
this, &QgsVectorLayerProperties::onCancel );
174 mMapTipExpressionFieldWidget->setLayer( lyr );
175 mMapTipExpressionFieldWidget->registerExpressionContextGenerator(
this );
176 mDisplayExpressionWidget->setLayer( lyr );
177 mDisplayExpressionWidget->registerExpressionContextGenerator(
this );
179 connect( mInsertExpressionButton, &QAbstractButton::clicked,
this, &QgsVectorLayerProperties::insertFieldOrExpression );
184 QVBoxLayout *layout =
nullptr;
189 layout =
new QVBoxLayout( labelingFrame );
190 layout->setContentsMargins( 0, 0, 0, 0 );
192 labelingDialog->layout()->setContentsMargins( 0, 0, 0, 0 );
194 layout->addWidget( labelingDialog );
195 labelingFrame->setLayout( layout );
198 layout =
new QVBoxLayout( mMaskingFrame );
199 layout->setContentsMargins( 0, 0, 0, 0 );
200 mMaskingWidget =
new QgsMaskingWidget( mMaskingFrame );
201 mMaskingWidget->setLayer( mLayer );
202 mMaskingWidget->layout()->setContentsMargins( 0, 0, 0, 0 );
203 layout->addWidget( mMaskingWidget );
204 mMaskingFrame->setLayout( layout );
208 labelingDialog =
nullptr;
209 mOptsPage_Labels->setEnabled(
false );
210 mOptsPage_Masks->setEnabled(
false );
211 mGeomGroupBox->setEnabled(
false );
212 mGeomGroupBox->setVisible(
false );
213 mCrsGroupBox->setEnabled(
false );
214 mCrsGroupBox->setVisible(
false );
218 QVBoxLayout *actionLayout =
new QVBoxLayout( actionOptionsFrame );
219 actionLayout->setContentsMargins( 0, 0, 0, 0 );
221 mActionDialog->layout()->setContentsMargins( 0, 0, 0, 0 );
222 actionLayout->addWidget( mActionDialog );
225 mSourceFieldsPropertiesDialog->layout()->setContentsMargins( 0, 0, 0, 0 );
226 mSourceFieldsFrame->setLayout(
new QVBoxLayout( mSourceFieldsFrame ) );
227 mSourceFieldsFrame->layout()->setContentsMargins( 0, 0, 0, 0 );
228 mSourceFieldsFrame->layout()->addWidget( mSourceFieldsPropertiesDialog );
233 mAttributesFormPropertiesDialog->layout()->setContentsMargins( 0, 0, 0, 0 );
234 mAttributesFormFrame->setLayout(
new QVBoxLayout( mAttributesFormFrame ) );
235 mAttributesFormFrame->layout()->setContentsMargins( 0, 0, 0, 0 );
236 mAttributesFormFrame->layout()->addWidget( mAttributesFormPropertiesDialog );
239 QVBoxLayout *metadataLayout =
new QVBoxLayout( metadataFrame );
240 metadataLayout->setContentsMargins( 0, 0, 0, 0 );
242 mMetadataWidget->layout()->setContentsMargins( 0, 0, 0, 0 );
244 metadataLayout->addWidget( mMetadataWidget );
245 metadataFrame->setLayout( metadataLayout );
247 QVBoxLayout *temporalLayout =
new QVBoxLayout( temporalFrame );
248 temporalLayout->setContentsMargins( 0, 0, 0, 0 );
250 temporalLayout->addWidget( mTemporalWidget );
260 pbnIndex->setEnabled(
false );
264 pbnIndex->setEnabled(
false );
265 pbnIndex->setText( tr(
"Spatial Index Exists" ) );
272 int encindex = cboProviderEncoding->findText( enc );
275 cboProviderEncoding->insertItem( 0, enc );
278 cboProviderEncoding->setCurrentIndex( encindex );
280 else if ( mLayer->
providerType() == QLatin1String(
"ogr" ) )
285 cboProviderEncoding->setEnabled(
false );
290 mDataSourceEncodingFrame->hide();
294 mCrsSelector->setCrs( mLayer->
crs() );
297 const QList< QgsVectorLayerJoinInfo > &joins = mLayer->
vectorJoins();
300 addJoinToTreeWidget( join );
305 QVBoxLayout *diagLayout =
new QVBoxLayout( mDiagramFrame );
306 diagLayout->setContentsMargins( 0, 0, 0, 0 );
308 diagramPropertiesDialog->layout()->setContentsMargins( 0, 0, 0, 0 );
310 diagLayout->addWidget( diagramPropertiesDialog );
311 mDiagramFrame->setLayout( diagLayout );
314 mLegendWidget->setMapCanvas( mCanvas );
315 mLegendWidget->setLayer( mLayer );
316 mLegendConfigEmbeddedWidget->setLayer( mLayer );
319 mLayerShortNameLineEdit->setText( mLayer->
shortName() );
322 mLayerShortNameLineEdit->setValidator( shortNameValidator );
325 mLayerTitleLineEdit->setText( mLayer->
title() );
326 mLayerAbstractTextEdit->setPlainText( mLayer->
abstract() );
327 mLayerKeywordListLineEdit->setText( mLayer->
keywordList() );
328 mLayerDataUrlLineEdit->setText( mLayer->
dataUrl() );
329 mLayerDataUrlFormatComboBox->setCurrentIndex(
330 mLayerDataUrlFormatComboBox->findText(
335 mLayerAttributionLineEdit->setText( mLayer->
attribution() );
336 mLayerAttributionUrlLineEdit->setText( mLayer->
attributionUrl() );
339 tableViewMetadataUrl->setSelectionMode( QAbstractItemView::SingleSelection );
340 tableViewMetadataUrl->setSelectionBehavior( QAbstractItemView::SelectRows );
341 tableViewMetadataUrl->horizontalHeader()->setStretchLastSection(
true );
342 tableViewMetadataUrl->horizontalHeader()->setSectionResizeMode( QHeaderView::Stretch );
344 mMetadataUrlModel =
new QStandardItemModel( tableViewMetadataUrl );
345 mMetadataUrlModel->clear();
346 mMetadataUrlModel->setColumnCount( 3 );
347 QStringList metadataUrlHeaders;
348 metadataUrlHeaders << tr(
"URL" ) << tr(
"Type" ) << tr(
"Format" );
349 mMetadataUrlModel->setHorizontalHeaderLabels( metadataUrlHeaders );
350 tableViewMetadataUrl->setModel( mMetadataUrlModel );
351 tableViewMetadataUrl->setItemDelegate(
new MetadataUrlItemDelegate(
this ) );
356 const int row = mMetadataUrlModel->rowCount();
357 mMetadataUrlModel->setItem( row, 0,
new QStandardItem( metaUrl.url ) );
358 mMetadataUrlModel->setItem( row, 1,
new QStandardItem( metaUrl.type ) );
359 mMetadataUrlModel->setItem( row, 2,
new QStandardItem( metaUrl.format ) );
363 mLayerLegendUrlLineEdit->setText( mLayer->
legendUrl() );
364 mLayerLegendUrlFormatComboBox->setCurrentIndex(
365 mLayerLegendUrlFormatComboBox->findText(
372 const QList<QgsMapLayerServerProperties::WmsDimensionInfo> &wmsDims = serverProperties->
wmsDimensions();
375 addWmsDimensionInfoToTreeWidget( dim );
379 myStyle.append( QStringLiteral(
"body { margin: 10px; }\n " ) );
380 teMetadataViewer->clear();
381 teMetadataViewer->document()->setDefaultStyleSheet( myStyle );
382 teMetadataViewer->setHtml( htmlMetadata() );
383 teMetadataViewer->setOpenLinks(
false );
384 connect( teMetadataViewer, &QTextBrowser::anchorClicked,
this, &QgsVectorLayerProperties::urlClicked );
385 mMetadataFilled =
true;
390 if ( !settings.
contains( QStringLiteral(
"/Windows/VectorLayerProperties/tab" ) ) )
392 settings.
setValue( QStringLiteral(
"Windows/VectorLayerProperties/tab" ),
396 QString title = tr(
"Layer Properties — %1" ).arg( mLayer->
name() );
401 QList<QgsMapLayer *> dependencySources;
402 const QSet<QgsMapLayerDependency> constDependencies = mLayer->
dependencies();
407 dependencySources << layer;
413 connect(
QgsProject::instance(), &QObject::destroyed,
this, [ = ] {mLayersDependenciesTreeView->setModel(
nullptr );} );
414 mLayersDependenciesTreeView->setModel( mLayersDependenciesTreeModel );
416 connect( mRefreshLayerCheckBox, &QCheckBox::toggled, mRefreshLayerIntervalSpinBox, &QDoubleSpinBox::setEnabled );
419 QMenu *menu =
new QMenu(
this );
421 mAuxiliaryLayerActionNew =
new QAction( tr(
"Create" ),
this );
422 menu->addAction( mAuxiliaryLayerActionNew );
423 connect( mAuxiliaryLayerActionNew, &QAction::triggered,
this, &QgsVectorLayerProperties::onAuxiliaryLayerNew );
425 mAuxiliaryLayerActionClear =
new QAction( tr(
"Clear" ),
this );
426 menu->addAction( mAuxiliaryLayerActionClear );
427 connect( mAuxiliaryLayerActionClear, &QAction::triggered,
this, &QgsVectorLayerProperties::onAuxiliaryLayerClear );
429 mAuxiliaryLayerActionDelete =
new QAction( tr(
"Delete" ),
this );
430 menu->addAction( mAuxiliaryLayerActionDelete );
431 connect( mAuxiliaryLayerActionDelete, &QAction::triggered,
this, &QgsVectorLayerProperties::onAuxiliaryLayerDelete );
433 mAuxiliaryLayerActionExport =
new QAction( tr(
"Export" ),
this );
434 menu->addAction( mAuxiliaryLayerActionExport );
437 mAuxiliaryStorageActions->setMenu( menu );
439 connect( mAuxiliaryStorageFieldsDeleteBtn, &QPushButton::clicked,
this, &QgsVectorLayerProperties::onAuxiliaryLayerDeleteField );
440 connect( mAuxiliaryStorageFieldsAddBtn, &QPushButton::clicked,
this, &QgsVectorLayerProperties::onAuxiliaryLayerAddField );
442 updateAuxiliaryStoragePage();
444 mOptsPage_Information->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#information-properties" ) );
445 mOptsPage_Source->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#source-properties" ) );
446 mOptsPage_Style->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#symbology-properties" ) );
447 mOptsPage_Labels->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#labels-properties" ) );
448 mOptsPage_Masks->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#masks-properties" ) );
449 mOptsPage_Diagrams->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#diagrams-properties" ) );
450 mOptsPage_SourceFields->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#fields-properties" ) );
451 mOptsPage_AttributesForm->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#attributes-form-properties" ) );
452 mOptsPage_Joins->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#joins-properties" ) );
453 mOptsPage_AuxiliaryStorage->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#auxiliary-storage-properties" ) );
454 mOptsPage_Actions->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#actions-properties" ) );
455 mOptsPage_Display->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#display-properties" ) );
456 mOptsPage_Rendering->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#rendering-properties" ) );
457 mOptsPage_Variables->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#variables-properties" ) );
458 mOptsPage_Metadata->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#metadata-properties" ) );
459 mOptsPage_DataDependencies->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#dependencies-properties" ) ) ;
460 mOptsPage_Legend->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#legend-properties" ) );
461 mOptsPage_Server->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#qgis-server-properties" ) );
467 void QgsVectorLayerProperties::toggleEditing()
472 emit toggleEditing( mLayer );
474 setPbnQueryBuilderEnabled();
488 mLayerPropertiesPages << page;
491 if ( beforePage.isEmpty() )
498 void QgsVectorLayerProperties::insertFieldOrExpression()
502 QString expression = QStringLiteral(
"[% " );
503 expression += mMapTipExpressionFieldWidget->asExpression();
504 expression += QLatin1String(
" %]" );
506 mMapTipWidget->insertText( expression );
509 void QgsVectorLayerProperties::addMetadataUrl()
511 const int row = mMetadataUrlModel->rowCount();
512 mMetadataUrlModel->setItem( row, 0,
new QStandardItem( QLatin1String() ) );
513 mMetadataUrlModel->setItem( row, 1,
new QStandardItem( QLatin1String() ) );
514 mMetadataUrlModel->setItem( row, 2,
new QStandardItem( QLatin1String() ) );
517 void QgsVectorLayerProperties::removeSelectedMetadataUrl()
519 const QModelIndexList selectedRows = tableViewMetadataUrl->selectionModel()->selectedRows();
520 if ( selectedRows.empty() )
522 mMetadataUrlModel->removeRow( selectedRows[0].row() );
526 void QgsVectorLayerProperties::syncToLayer()
528 if ( !mSourceWidget )
533 QHBoxLayout *layout =
new QHBoxLayout();
534 layout->addWidget( mSourceWidget );
535 mSourceGroupBox->setLayout( layout );
536 mSourceGroupBox->show();
540 buttonBox->button( QDialogButtonBox::Apply )->setEnabled( isValid );
541 buttonBox->button( QDialogButtonBox::Ok )->setEnabled( isValid );
550 mLayerOrigNameLineEdit->setText( mLayer->
name() );
551 mBackupCrs = mLayer->
crs();
553 mSubsetGroupBox->setEnabled(
true );
560 txtSubsetSQL->setReadOnly(
true );
561 txtSubsetSQL->setCaretWidth( 0 );
562 txtSubsetSQL->setCaretLineVisible(
false );
563 setPbnQueryBuilderEnabled();
571 mScaleRangeWidget->setMapCanvas( mCanvas );
574 mReferenceScaleWidget->setShowCurrentScaleButton(
true );
575 mReferenceScaleWidget->setMapCanvas( mCanvas );
576 if ( mUseReferenceScaleGroupBox->isChecked() )
579 mReferenceScaleWidget->setScale( mCanvas->
scale() );
584 mSimplifyDrawingSpinBox->setValue( simplifyMethod.
threshold() );
585 mSimplifyDrawingSpinBox->setClearValue( 1.0 );
587 QString remark = QStringLiteral(
" (%1)" ).arg( tr(
"Not supported" ) );
591 mSimplifyDrawingAtProvider->setChecked(
false );
592 mSimplifyDrawingAtProvider->setEnabled(
false );
593 if ( !mSimplifyDrawingAtProvider->text().endsWith( remark ) )
594 mSimplifyDrawingAtProvider->setText( mSimplifyDrawingAtProvider->text().append( remark ) );
599 mSimplifyDrawingAtProvider->setEnabled( mSimplifyDrawingGroupBox->isChecked() );
600 if ( mSimplifyDrawingAtProvider->text().endsWith( remark ) )
602 QString newText = mSimplifyDrawingAtProvider->text();
603 newText.chop( remark.size() );
604 mSimplifyDrawingAtProvider->setText( newText );
611 mSimplifyDrawingGroupBox->setChecked(
false );
612 mSimplifyDrawingGroupBox->setEnabled(
false );
619 mSimplifyAlgorithmComboBox->setCurrentIndex( mSimplifyAlgorithmComboBox->findData( simplifyMethod.
simplifyAlgorithm() ) );
622 myScalesList.append( QStringLiteral(
"1:1" ) );
623 mSimplifyMaximumScaleComboBox->updateScales( myScalesList );
624 mSimplifyMaximumScaleComboBox->setScale( simplifyMethod.
maximumScale() );
638 updateSymbologyPage();
642 if ( labelingDialog )
645 mSourceFieldsPropertiesDialog->
init();
646 mAttributesFormPropertiesDialog->
init();
649 updateVariableEditor();
651 if ( diagramPropertiesDialog )
655 const auto constMLayerPropertiesPages = mLayerPropertiesPages;
658 page->syncToLayer( mLayer );
665 mLegendWidget->setLayer( mLayer );
669 void QgsVectorLayerProperties::apply()
673 const QString newSource = mSourceWidget->
sourceUri();
674 if ( newSource != mLayer->
source() )
681 if ( labelingDialog )
685 mBackupCrs = mLayer->
crs();
687 mLegendWidget->applyToLayer();
688 mLegendConfigEmbeddedWidget->applyToLayer();
692 mMetadataFilled =
false;
695 if ( mMaskingWidget && mMaskingWidget->hasBeenPopulated() )
696 mMaskingWidget->apply();
701 mSubsetGroupBox->setEnabled(
true );
707 mMetadataFilled =
false;
729 const auto constActions = mActionDialog->
actions();
730 for (
const QgsAction &action : constActions )
737 QVector<QgsAttributeTableConfig::ColumnConfig> columns = attributeTableConfig.
columns();
739 for (
int i = 0; i < columns.size(); ++i )
751 mLayer->
setName( mLayerOrigNameLineEdit->text() );
753 mAttributesFormPropertiesDialog->
apply();
754 mSourceFieldsPropertiesDialog->
apply();
766 diagramPropertiesDialog->
apply();
769 const auto constMLayerPropertiesPages = mLayerPropertiesPages;
776 if ( mLayer->
shortName() != mLayerShortNameLineEdit->text() )
777 mMetadataFilled =
false;
778 mLayer->
setShortName( mLayerShortNameLineEdit->text() );
780 if ( mLayer->
title() != mLayerTitleLineEdit->text() )
781 mMetadataFilled =
false;
782 mLayer->
setTitle( mLayerTitleLineEdit->text() );
784 if ( mLayer->
abstract() != mLayerAbstractTextEdit->toPlainText() )
785 mMetadataFilled =
false;
786 mLayer->
setAbstract( mLayerAbstractTextEdit->toPlainText() );
788 if ( mLayer->
keywordList() != mLayerKeywordListLineEdit->text() )
789 mMetadataFilled =
false;
792 if ( mLayer->
dataUrl() != mLayerDataUrlLineEdit->text() )
793 mMetadataFilled =
false;
794 mLayer->
setDataUrl( mLayerDataUrlLineEdit->text() );
796 if ( mLayer->
dataUrlFormat() != mLayerDataUrlFormatComboBox->currentText() )
797 mMetadataFilled =
false;
801 if ( mLayer->
attribution() != mLayerAttributionLineEdit->text() )
802 mMetadataFilled =
false;
805 if ( mLayer->
attributionUrl() != mLayerAttributionUrlLineEdit->text() )
806 mMetadataFilled =
false;
810 QList<QgsMapLayerServerProperties::MetadataUrl> metaUrls;
811 for (
int row = 0; row < mMetadataUrlModel->rowCount() ; row++ )
814 metaUrl.
url = mMetadataUrlModel->item( row, 0 )->text();
815 metaUrl.
type = mMetadataUrlModel->item( row, 1 )->text();
816 metaUrl.
format = mMetadataUrlModel->item( row, 2 )->text();
817 metaUrls.append( metaUrl );
818 mMetadataFilled =
false;
823 if ( mLayer->
legendUrl() != mLayerLegendUrlLineEdit->text() )
824 mMetadataFilled =
false;
825 mLayer->
setLegendUrl( mLayerLegendUrlLineEdit->text() );
827 if ( mLayer->
legendUrlFormat() != mLayerLegendUrlFormatComboBox->currentText() )
828 mMetadataFilled =
false;
833 if ( mSimplifyDrawingGroupBox->isChecked() )
841 simplifyMethod.
setThreshold( mSimplifyDrawingSpinBox->value() );
843 simplifyMethod.
setMaximumScale( mSimplifyMaximumScaleComboBox->scale() );
856 mLayer->
setRefreshOnNofifyMessage( mNotificationMessageCheckBox->isChecked() ? mNotifyMessagValueLineEdit->text() : QString() );
862 updateVariableEditor();
865 QSet<QgsMapLayerDependency> deps;
866 const auto checkedLayers = mLayersDependenciesTreeModel->
checkedLayers();
871 QMessageBox::warning(
nullptr, tr(
"Save Dependency" ), tr(
"This configuration introduces a cycle in data dependencies and will be ignored." ) );
879 void QgsVectorLayerProperties::onCancel()
886 const auto constVectorJoins = mLayer->
vectorJoins();
906 QDomDocument doc( QStringLiteral(
"qgis" ) );
907 int errorLine, errorColumn;
908 doc.setContent( mOldStyle.
xmlData(),
false, &myMessage, &errorLine, &errorColumn );
912 if ( mBackupCrs != mLayer->
crs() )
913 mLayer->
setCrs( mBackupCrs );
916 void QgsVectorLayerProperties::urlClicked(
const QUrl &url )
918 QFileInfo file( url.toLocalFile() );
919 if ( file.exists() && !file.isDir() )
922 QDesktopServices::openUrl( url );
925 void QgsVectorLayerProperties::pbnQueryBuilder_clicked()
934 if ( dialog->exec() )
948 void QgsVectorLayerProperties::pbnIndex_clicked()
953 setCursor( Qt::WaitCursor );
955 setCursor( Qt::ArrowCursor );
958 pbnIndex->setEnabled(
false );
959 pbnIndex->setText( tr(
"Spatial Index Exists" ) );
960 QMessageBox::information(
this, tr(
"Spatial Index" ), tr(
"Creation of spatial index successful" ) );
964 QMessageBox::warning(
this, tr(
"Spatial Index" ), tr(
"Creation of spatial index failed" ) );
969 QString QgsVectorLayerProperties::htmlMetadata()
979 mMetadataFilled =
false;
983 void QgsVectorLayerProperties::loadDefaultStyle_clicked()
986 bool defaultLoadedFlag =
false;
993 QMessageBox askToUser;
994 askToUser.setText( tr(
"Load default style from: " ) );
995 askToUser.setIcon( QMessageBox::Question );
996 askToUser.addButton( tr(
"Cancel" ), QMessageBox::RejectRole );
997 askToUser.addButton( tr(
"Local Database" ), QMessageBox::NoRole );
998 askToUser.addButton( tr(
"Datasource Database" ), QMessageBox::YesRole );
1000 switch ( askToUser.exec() )
1006 if ( !defaultLoadedFlag )
1009 QMessageBox::information(
this, tr(
"Default Style" ), msg );
1011 if ( msg.compare( tr(
"Loaded from Provider" ) ) )
1013 QMessageBox::information(
this, tr(
"Default Style" ),
1014 tr(
"No default style was found for this layer." ) );
1030 if ( defaultLoadedFlag )
1038 QMessageBox::information(
this, tr(
"Default Style" ), myMessage );
1042 void QgsVectorLayerProperties::saveDefaultStyle_clicked()
1051 QMessageBox askToUser;
1052 askToUser.setText( tr(
"Save default style to: " ) );
1053 askToUser.setIcon( QMessageBox::Question );
1054 askToUser.addButton( tr(
"Cancel" ), QMessageBox::RejectRole );
1055 askToUser.addButton( tr(
"Local Database" ), QMessageBox::NoRole );
1056 askToUser.addButton( tr(
"Datasource Database" ), QMessageBox::YesRole );
1058 switch ( askToUser.exec() )
1064 QString errorMessage;
1067 if ( QMessageBox::question(
nullptr, QObject::tr(
"Save style in database" ),
1068 QObject::tr(
"A matching style already exists in the database for this layer. Do you want to overwrite it?" ),
1069 QMessageBox::Yes | QMessageBox::No ) == QMessageBox::No )
1074 else if ( !errorMessage.isEmpty() )
1076 QMessageBox::warning(
nullptr, QObject::tr(
"Save style in database" ),
1082 if ( errorMsg.isNull() )
1093 bool defaultSavedFlag =
false;
1095 if ( !defaultSavedFlag )
1097 QMessageBox::warning(
this, tr(
"Default Style" ), errorMsg );
1101 void QgsVectorLayerProperties::loadMetadata()
1104 QString myLastUsedDir = myQSettings.
value( QStringLiteral(
"style/lastStyleDir" ), QDir::homePath() ).toString();
1106 QString myFileName = QFileDialog::getOpenFileName(
this, tr(
"Load Layer Metadata from Metadata File" ), myLastUsedDir,
1107 tr(
"QGIS Layer Metadata File" ) +
" (*.qmd)" );
1108 if ( myFileName.isNull() )
1114 bool defaultLoadedFlag =
false;
1118 if ( defaultLoadedFlag )
1125 QMessageBox::warning(
this, tr(
"Load Metadata" ), myMessage );
1128 QFileInfo myFI( myFileName );
1129 QString myPath = myFI.path();
1130 myQSettings.
setValue( QStringLiteral(
"style/lastStyleDir" ), myPath );
1135 void QgsVectorLayerProperties::saveMetadataAs()
1138 QString myLastUsedDir = myQSettings.
value( QStringLiteral(
"style/lastStyleDir" ), QDir::homePath() ).toString();
1140 QString myOutputFileName = QFileDialog::getSaveFileName(
this, tr(
"Save Layer Metadata as QMD" ),
1141 myLastUsedDir, tr(
"QMD File" ) +
" (*.qmd)" );
1142 if ( myOutputFileName.isNull() )
1156 bool defaultLoadedFlag =
false;
1160 if ( defaultLoadedFlag )
1167 QMessageBox::information(
this, tr(
"Save Metadata" ), myMessage );
1170 QFileInfo myFI( myOutputFileName );
1171 QString myPath = myFI.path();
1173 myQSettings.
setValue( QStringLiteral(
"style/lastStyleDir" ), myPath );
1176 void QgsVectorLayerProperties::saveDefaultMetadata()
1180 bool defaultSavedFlag =
false;
1182 if ( !defaultSavedFlag )
1184 QMessageBox::warning(
this, tr(
"Default Metadata" ), errorMsg );
1188 void QgsVectorLayerProperties::loadDefaultMetadata()
1190 bool defaultLoadedFlag =
false;
1193 if ( defaultLoadedFlag )
1199 QMessageBox::information(
this, tr(
"Default Metadata" ), myMessage );
1204 void QgsVectorLayerProperties::saveStyleAs()
1215 bool defaultLoadedFlag =
false;
1217 StyleType type = dlg.currentStyleType();
1224 QString filePath = dlg.outputFilePath();
1226 message = mLayer->
saveNamedStyle( filePath, defaultLoadedFlag, dlg.styleCategories() );
1228 message = mLayer->
saveSldStyle( filePath, defaultLoadedFlag );
1231 if ( defaultLoadedFlag )
1238 QMessageBox::information(
this, tr(
"Save Style" ), message );
1245 QString infoWindowTitle = QObject::tr(
"Save style to DB (%1)" ).arg( mLayer->
providerType() );
1250 QString errorMessage;
1253 if ( QMessageBox::question(
nullptr, QObject::tr(
"Save style in database" ),
1254 QObject::tr(
"A matching style already exists in the database for this layer. Do you want to overwrite it?" ),
1255 QMessageBox::Yes | QMessageBox::No ) == QMessageBox::No )
1260 else if ( !errorMessage.isEmpty() )
1262 mMessageBar->
pushMessage( infoWindowTitle, errorMessage, Qgis::MessageLevel::Warning );
1268 if ( !msgError.isNull() )
1270 mMessageBar->
pushMessage( infoWindowTitle, msgError, Qgis::MessageLevel::Warning );
1274 mMessageBar->
pushMessage( infoWindowTitle, tr(
"Style saved" ), Qgis::MessageLevel::Success );
1282 void QgsVectorLayerProperties::saveMultipleStylesAs()
1285 dlg.setSaveOnlyCurrentStyle(
false );
1294 const QListWidget *stylesWidget { dlg.stylesWidget() };
1297 QStringList stylesSelected;
1298 for (
int i = 0; i < stylesWidget->count(); i++ )
1300 if ( stylesWidget->item( i )->checkState() == Qt::CheckState::Checked )
1302 stylesSelected.push_back( stylesWidget->item( i )->text() );
1306 if ( ! stylesSelected.isEmpty() )
1309 for (
const QString &styleName : std::as_const( stylesSelected ) )
1311 bool defaultLoadedFlag =
false;
1313 StyleType type = dlg.currentStyleType();
1321 const QString filePath { dlg.outputFilePath() };
1322 QString safePath { filePath };
1323 if ( styleIndex > 0 && stylesSelected.count( ) > 1 )
1326 while ( QFile::exists( safePath ) )
1328 const QFileInfo fi { filePath };
1329 safePath = QString( filePath ).replace(
'.' + fi.completeSuffix(), QStringLiteral(
"_%1.%2" )
1330 .arg( QString::number( i ) )
1331 .arg( fi.completeSuffix() ) );
1336 message = mLayer->
saveNamedStyle( safePath, defaultLoadedFlag, dlg.styleCategories() );
1338 message = mLayer->
saveSldStyle( safePath, defaultLoadedFlag );
1341 if ( defaultLoadedFlag )
1348 QMessageBox::information(
this, tr(
"Save Style" ), message );
1355 QString infoWindowTitle = QObject::tr(
"Save style '%1' to DB (%2)" )
1363 QString name { dbSettings.
name };
1364 if ( name.isEmpty() )
1370 QStringList ids, names, descriptions;
1373 while ( names.contains( name ) )
1375 name = QStringLiteral(
"%1 %2" ).arg( name ).arg( QString::number( i ) );
1380 QString errorMessage;
1383 if ( QMessageBox::question(
nullptr, QObject::tr(
"Save style in database" ),
1384 QObject::tr(
"A matching style already exists in the database for this layer. Do you want to overwrite it?" ),
1385 QMessageBox::Yes | QMessageBox::No ) == QMessageBox::No )
1390 else if ( !errorMessage.isEmpty() )
1392 mMessageBar->
pushMessage( infoWindowTitle, errorMessage, Qgis::MessageLevel::Warning );
1398 if ( !msgError.isNull() )
1400 mMessageBar->
pushMessage( infoWindowTitle, msgError, Qgis::MessageLevel::Warning );
1404 mMessageBar->
pushMessage( infoWindowTitle, tr(
"Style '%1' saved" ).arg( styleName ),
1405 Qgis::MessageLevel::Success );
1418 void QgsVectorLayerProperties::aboutToShowStyleMenu()
1421 QMenu *m = qobject_cast<QMenu *>( sender() );
1424 m->addAction( mActionLoadStyle );
1425 m->addAction( mActionSaveStyle );
1430 mActionSaveStyle->setText( tr(
"Save Current Style…" ) );
1431 m->addAction( mActionSaveMultipleStyles );
1435 mActionSaveStyle->setText( tr(
"Save Style…" ) );
1439 m->addAction( tr(
"Save as Default" ),
this, &QgsVectorLayerProperties::saveDefaultStyle_clicked );
1440 m->addAction( tr(
"Restore Default" ),
this, &QgsVectorLayerProperties::loadDefaultStyle_clicked );
1447 void QgsVectorLayerProperties::loadStyle()
1452 QStringList ids, names, descriptions;
1457 dlg.initializeLists( ids, names, descriptions, sectionLimit );
1462 QgsMapLayer::StyleCategories categories = dlg.styleCategories();
1463 StyleType type = dlg.currentStyleType();
1470 bool defaultLoadedFlag =
false;
1471 QString filePath = dlg.filePath();
1474 message = mLayer->
loadSldStyle( filePath, defaultLoadedFlag );
1478 message = mLayer->
loadNamedStyle( filePath, defaultLoadedFlag,
true, categories );
1481 if ( defaultLoadedFlag )
1488 QMessageBox::warning(
this, tr(
"Load Style" ), message );
1494 QString selectedStyleId = dlg.selectedStyleId();
1497 if ( !errorMsg.isNull() )
1499 QMessageBox::warning(
this, tr(
"Load Styles from Database" ), errorMsg );
1503 QDomDocument myDocument( QStringLiteral(
"qgis" ) );
1504 myDocument.setContent( qmlStyle );
1512 QMessageBox::warning(
this, tr(
"Load Styles from Database" ),
1513 tr(
"The retrieved style is not a valid named style. Error message: %1" )
1523 void QgsVectorLayerProperties::mButtonAddJoin_clicked()
1528 QList<QgsMapLayer *> joinedLayers;
1529 const QList< QgsVectorLayerJoinInfo > &joins = mLayer->
vectorJoins();
1530 joinedLayers.reserve( joins.size() );
1531 for (
int i = 0; i < joins.size(); ++i )
1533 joinedLayers.append( joins[i].joinLayer() );
1537 if ( d.exec() == QDialog::Accepted )
1541 if ( d.createAttributeIndex() )
1550 addJoinToTreeWidget( info );
1551 setPbnQueryBuilderEnabled();
1552 mSourceFieldsPropertiesDialog->
init();
1553 mAttributesFormPropertiesDialog->
init();
1557 void QgsVectorLayerProperties::mButtonEditJoin_clicked()
1559 QTreeWidgetItem *currentJoinItem = mJoinTreeWidget->currentItem();
1560 mJoinTreeWidget_itemDoubleClicked( currentJoinItem, 0 );
1563 void QgsVectorLayerProperties::mJoinTreeWidget_itemDoubleClicked( QTreeWidgetItem *item,
int )
1565 if ( !mLayer || !item )
1570 QList<QgsMapLayer *> joinedLayers;
1571 QString joinLayerId = item->data( 0, Qt::UserRole ).toString();
1572 const QList< QgsVectorLayerJoinInfo > &joins = mLayer->
vectorJoins();
1574 for (
int i = 0; i < joins.size(); ++i )
1580 if ( joinLayer->
id() == joinLayerId )
1587 joinedLayers.append( joinLayer );
1596 d.setWindowTitle( tr(
"Edit Vector Join" ) );
1597 d.setJoinInfo( joins[j] );
1599 if ( d.exec() == QDialog::Accepted )
1605 int idx = mJoinTreeWidget->indexOfTopLevelItem( item );
1606 mJoinTreeWidget->takeTopLevelItem( idx );
1611 if ( d.createAttributeIndex() )
1620 addJoinToTreeWidget( info, idx );
1622 setPbnQueryBuilderEnabled();
1623 mSourceFieldsPropertiesDialog->
init();
1624 mAttributesFormPropertiesDialog->
init();
1628 void QgsVectorLayerProperties::addJoinToTreeWidget(
const QgsVectorLayerJoinInfo &join,
const int insertIndex )
1630 QTreeWidgetItem *joinItem =
new QTreeWidgetItem();
1631 joinItem->setFlags( Qt::ItemIsEnabled );
1634 if ( !mLayer || !joinLayer )
1639 joinItem->setText( 0, tr(
"Join layer" ) );
1645 joinItem->setText( 1, joinLayer->
name() );
1647 QFont f = joinItem->font( 0 );
1649 joinItem->setFont( 0, f );
1650 joinItem->setFont( 1, f );
1652 joinItem->setData( 0, Qt::UserRole, join.
joinLayerId() );
1654 QTreeWidgetItem *childJoinField =
new QTreeWidgetItem();
1655 childJoinField->setText( 0, tr(
"Join field" ) );
1657 childJoinField->setFlags( Qt::ItemIsEnabled );
1658 joinItem->addChild( childJoinField );
1660 QTreeWidgetItem *childTargetField =
new QTreeWidgetItem();
1661 childTargetField->setText( 0, tr(
"Target field" ) );
1663 joinItem->addChild( childTargetField );
1665 QTreeWidgetItem *childMemCache =
new QTreeWidgetItem();
1666 childMemCache->setText( 0, tr(
"Cache join layer in virtual memory" ) );
1668 childMemCache->setText( 1, QChar( 0x2714 ) );
1669 joinItem->addChild( childMemCache );
1671 QTreeWidgetItem *childDynForm =
new QTreeWidgetItem();
1672 childDynForm->setText( 0, tr(
"Dynamic form" ) );
1674 childDynForm->setText( 1, QChar( 0x2714 ) );
1675 joinItem->addChild( childDynForm );
1677 QTreeWidgetItem *childEditable =
new QTreeWidgetItem();
1678 childEditable->setText( 0, tr(
"Editable join layer" ) );
1680 childEditable->setText( 1, QChar( 0x2714 ) );
1681 joinItem->addChild( childEditable );
1683 QTreeWidgetItem *childUpsert =
new QTreeWidgetItem();
1684 childUpsert->setText( 0, tr(
"Upsert on edit" ) );
1686 childUpsert->setText( 1, QChar( 0x2714 ) );
1687 joinItem->addChild( childUpsert );
1689 QTreeWidgetItem *childCascade =
new QTreeWidgetItem();
1690 childCascade->setText( 0, tr(
"Delete cascade" ) );
1692 childCascade->setText( 1, QChar( 0x2714 ) );
1693 joinItem->addChild( childCascade );
1695 QTreeWidgetItem *childPrefix =
new QTreeWidgetItem();
1696 childPrefix->setText( 0, tr(
"Custom field name prefix" ) );
1697 childPrefix->setText( 1, join.
prefix() );
1698 joinItem->addChild( childPrefix );
1700 QTreeWidgetItem *childFields =
new QTreeWidgetItem();
1701 childFields->setText( 0, tr(
"Joined fields" ) );
1704 childFields->setText( 1, QLocale().toString( list->count() ) );
1706 childFields->setText( 1, tr(
"all" ) );
1707 joinItem->addChild( childFields );
1709 if ( insertIndex >= 0 )
1710 mJoinTreeWidget->insertTopLevelItem( insertIndex, joinItem );
1712 mJoinTreeWidget->addTopLevelItem( joinItem );
1714 mJoinTreeWidget->setCurrentItem( joinItem );
1715 mJoinTreeWidget->header()->setSectionResizeMode( QHeaderView::ResizeToContents );
1723 void QgsVectorLayerProperties::openPanel(
QgsPanelWidget *panel )
1725 QDialog *dlg =
new QDialog();
1726 QString key = QStringLiteral(
"/UI/paneldialog/%1" ).arg( panel->
panelTitle() );
1728 dlg->restoreGeometry( settings.
value( key ).toByteArray() );
1730 dlg->setLayout(
new QVBoxLayout() );
1731 dlg->layout()->addWidget( panel );
1732 QDialogButtonBox *buttonBox =
new QDialogButtonBox( QDialogButtonBox::Ok );
1733 connect( buttonBox, &QDialogButtonBox::accepted, dlg, &QDialog::accept );
1734 dlg->layout()->addWidget( buttonBox );
1736 settings.
setValue( key, dlg->saveGeometry() );
1740 void QgsVectorLayerProperties::mButtonRemoveJoin_clicked()
1742 QTreeWidgetItem *currentJoinItem = mJoinTreeWidget->currentItem();
1743 if ( !mLayer || !currentJoinItem )
1748 mLayer->
removeJoin( currentJoinItem->data( 0, Qt::UserRole ).toString() );
1749 mJoinTreeWidget->takeTopLevelItem( mJoinTreeWidget->indexOfTopLevelItem( currentJoinItem ) );
1750 setPbnQueryBuilderEnabled();
1751 mSourceFieldsPropertiesDialog->
init();
1752 mAttributesFormPropertiesDialog->
init();
1756 void QgsVectorLayerProperties::mButtonAddWmsDimension_clicked()
1762 QStringList alreadyDefinedDimensions;
1764 const QList<QgsMapLayerServerProperties::WmsDimensionInfo> &dims = serverProperties->
wmsDimensions();
1767 alreadyDefinedDimensions << dim.name;
1771 if ( d.exec() == QDialog::Accepted )
1776 addWmsDimensionInfoToTreeWidget( info );
1780 void QgsVectorLayerProperties::mButtonEditWmsDimension_clicked()
1782 QTreeWidgetItem *currentWmsDimensionItem = mWmsDimensionsTreeWidget->currentItem();
1783 mWmsDimensionsTreeWidget_itemDoubleClicked( currentWmsDimensionItem, 0 );
1786 void QgsVectorLayerProperties::mWmsDimensionsTreeWidget_itemDoubleClicked( QTreeWidgetItem *item,
int )
1788 if ( !mLayer || !item )
1793 QString wmsDimName = item->data( 0, Qt::UserRole ).toString();
1795 const QList<QgsMapLayerServerProperties::WmsDimensionInfo> &dims = serverProperties->
wmsDimensions();
1796 QStringList alreadyDefinedDimensions;
1798 for (
int i = 0; i < dims.size(); ++i )
1800 QString dimName = dims[i].name;
1801 if ( dimName == wmsDimName )
1807 alreadyDefinedDimensions << dimName;
1816 d.setWindowTitle( tr(
"Edit WMS Dimension" ) );
1817 d.setInfo( dims[j] );
1819 if ( d.exec() == QDialog::Accepted )
1826 int idx = mWmsDimensionsTreeWidget->indexOfTopLevelItem( item );
1827 mWmsDimensionsTreeWidget->takeTopLevelItem( idx );
1831 addWmsDimensionInfoToTreeWidget( info, idx );
1837 QTreeWidgetItem *wmsDimensionItem =
new QTreeWidgetItem();
1838 wmsDimensionItem->setFlags( Qt::ItemIsEnabled );
1840 wmsDimensionItem->setText( 0, tr(
"Dimension" ) );
1841 wmsDimensionItem->setText( 1, wmsDim.
name );
1843 QFont f = wmsDimensionItem->font( 0 );
1845 wmsDimensionItem->setFont( 0, f );
1846 wmsDimensionItem->setFont( 1, f );
1848 wmsDimensionItem->setData( 0, Qt::UserRole, wmsDim.
name );
1850 QTreeWidgetItem *childWmsDimensionField =
new QTreeWidgetItem();
1851 childWmsDimensionField->setText( 0, tr(
"Field" ) );
1852 childWmsDimensionField->setText( 1, wmsDim.
fieldName );
1853 childWmsDimensionField->setFlags( Qt::ItemIsEnabled );
1854 wmsDimensionItem->addChild( childWmsDimensionField );
1856 QTreeWidgetItem *childWmsDimensionEndField =
new QTreeWidgetItem();
1857 childWmsDimensionEndField->setText( 0, tr(
"End field" ) );
1858 childWmsDimensionEndField->setText( 1, wmsDim.
endFieldName );
1859 childWmsDimensionEndField->setFlags( Qt::ItemIsEnabled );
1860 wmsDimensionItem->addChild( childWmsDimensionEndField );
1862 QTreeWidgetItem *childWmsDimensionUnits =
new QTreeWidgetItem();
1863 childWmsDimensionUnits->setText( 0, tr(
"Units" ) );
1864 childWmsDimensionUnits->setText( 1, wmsDim.
units );
1865 childWmsDimensionUnits->setFlags( Qt::ItemIsEnabled );
1866 wmsDimensionItem->addChild( childWmsDimensionUnits );
1868 QTreeWidgetItem *childWmsDimensionUnitSymbol =
new QTreeWidgetItem();
1869 childWmsDimensionUnitSymbol->setText( 0, tr(
"Unit symbol" ) );
1870 childWmsDimensionUnitSymbol->setText( 1, wmsDim.
unitSymbol );
1871 childWmsDimensionUnitSymbol->setFlags( Qt::ItemIsEnabled );
1872 wmsDimensionItem->addChild( childWmsDimensionUnitSymbol );
1874 QTreeWidgetItem *childWmsDimensionDefaultValue =
new QTreeWidgetItem();
1875 childWmsDimensionDefaultValue->setText( 0, tr(
"Default display" ) );
1877 childWmsDimensionDefaultValue->setFlags( Qt::ItemIsEnabled );
1878 wmsDimensionItem->addChild( childWmsDimensionDefaultValue );
1880 QTreeWidgetItem *childWmsDimensionRefValue =
new QTreeWidgetItem();
1881 childWmsDimensionRefValue->setText( 0, tr(
"Reference value" ) );
1882 childWmsDimensionRefValue->setText( 1, wmsDim.
referenceValue.toString() );
1883 childWmsDimensionRefValue->setFlags( Qt::ItemIsEnabled );
1884 wmsDimensionItem->addChild( childWmsDimensionRefValue );
1886 if ( insertIndex >= 0 )
1887 mWmsDimensionsTreeWidget->insertTopLevelItem( insertIndex, wmsDimensionItem );
1889 mWmsDimensionsTreeWidget->addTopLevelItem( wmsDimensionItem );
1891 mWmsDimensionsTreeWidget->setCurrentItem( wmsDimensionItem );
1892 mWmsDimensionsTreeWidget->header()->setSectionResizeMode( QHeaderView::ResizeToContents );
1895 void QgsVectorLayerProperties::mButtonRemoveWmsDimension_clicked()
1897 QTreeWidgetItem *currentWmsDimensionItem = mWmsDimensionsTreeWidget->currentItem();
1898 if ( !mLayer || !currentWmsDimensionItem )
1904 serverProperties->
removeWmsDimension( currentWmsDimensionItem->data( 0, Qt::UserRole ).toString() );
1905 mWmsDimensionsTreeWidget->takeTopLevelItem( mWmsDimensionsTreeWidget->indexOfTopLevelItem( currentWmsDimensionItem ) );
1909 void QgsVectorLayerProperties::updateSymbologyPage()
1913 delete mRendererDialog;
1914 mRendererDialog =
nullptr;
1930 mOptsPage_Style->setEnabled(
false );
1933 if ( mRendererDialog )
1935 mRendererDialog->layout()->setContentsMargins( 0, 0, 0, 0 );
1936 widgetStackRenderers->addWidget( mRendererDialog );
1937 widgetStackRenderers->setCurrentWidget( mRendererDialog );
1938 widgetStackRenderers->currentWidget()->layout()->setContentsMargins( 0, 0, 0, 0 );
1942 void QgsVectorLayerProperties::setPbnQueryBuilderEnabled()
1944 pbnQueryBuilder->setEnabled( mLayer &&
1951 pbnQueryBuilder->setToolTip( tr(
"Stop editing mode to enable this." ) );
1956 void QgsVectorLayerProperties::pbnUpdateExtents_clicked()
1959 mMetadataFilled =
false;
1966 bool isMetadataPanel = ( index ==
mOptStackedWidget->indexOf( mOptsPage_Metadata ) );
1967 mBtnStyle->setVisible( ! isMetadataPanel );
1968 mBtnMetadata->setVisible( isMetadataPanel );
1970 if ( index ==
mOptStackedWidget->indexOf( mOptsPage_Information ) && ! mMetadataFilled )
1973 teMetadataViewer->clear();
1974 teMetadataViewer->setHtml( htmlMetadata() );
1975 mMetadataFilled =
true;
1981 void QgsVectorLayerProperties::mSimplifyDrawingGroupBox_toggled(
bool checked )
1986 mSimplifyDrawingAtProvider->setEnabled(
false );
1990 mSimplifyDrawingAtProvider->setEnabled( checked );
1994 void QgsVectorLayerProperties::updateVariableEditor()
1997 mVariableEditor->setContext( &context );
2001 mVariableEditor->reloadContext();
2002 mVariableEditor->setEditableScopeIndex( 2 );
2005 void QgsVectorLayerProperties::showHelp()
2007 const QVariant helpPage = mOptionsStackedWidget->currentWidget()->property(
"helpPage" );
2009 if ( helpPage.isValid() )
2015 QgsHelp::openHelp( QStringLiteral(
"working_with_vector/vector_properties.html" ) );
2019 void QgsVectorLayerProperties::updateAuxiliaryStoragePage()
2026 mAuxiliaryStorageInformationGrpBox->setEnabled(
true );
2027 mAuxiliaryStorageFieldsGrpBox->setEnabled(
true );
2034 mAuxiliaryStorageFeaturesLineEdit->setText( QLocale().toString( features ) );
2037 mAuxiliaryLayerActionClear->setEnabled(
true );
2038 mAuxiliaryLayerActionDelete->setEnabled(
true );
2039 mAuxiliaryLayerActionExport->setEnabled(
true );
2040 mAuxiliaryLayerActionNew->setEnabled(
false );
2046 mAuxiliaryStorageFieldsLineEdit->setText( QLocale().toString( fields ) );
2049 mAuxiliaryStorageFieldsTree->clear();
2053 QTreeWidgetItem *item =
new QTreeWidgetItem();
2055 item->setText( 0, prop.
origin() );
2056 item->setText( 1, prop.
name() );
2057 item->setText( 2, prop.
comment() );
2061 mAuxiliaryStorageFieldsTree->addTopLevelItem( item );
2067 mAuxiliaryStorageInformationGrpBox->setEnabled(
false );
2068 mAuxiliaryStorageFieldsGrpBox->setEnabled(
false );
2070 mAuxiliaryLayerActionClear->setEnabled(
false );
2071 mAuxiliaryLayerActionDelete->setEnabled(
false );
2072 mAuxiliaryLayerActionExport->setEnabled(
false );
2073 mAuxiliaryLayerActionNew->setEnabled(
true );
2075 mAuxiliaryStorageFieldsTree->clear();
2076 mAuxiliaryStorageKeyLineEdit->setText( QString() );
2077 mAuxiliaryStorageFieldsLineEdit->setText( QString() );
2078 mAuxiliaryStorageFeaturesLineEdit->setText( QString() );
2082 void QgsVectorLayerProperties::onAuxiliaryLayerNew()
2090 if ( dlg.exec() == QDialog::Accepted )
2092 updateAuxiliaryStoragePage();
2096 void QgsVectorLayerProperties::onAuxiliaryLayerClear()
2103 const QString msg = tr(
"Are you sure you want to clear auxiliary data for %1?" ).arg( mLayer->
name() );
2104 QMessageBox::StandardButton reply;
2105 reply = QMessageBox::question(
this,
"Clear Auxiliary Data", msg, QMessageBox::Yes | QMessageBox::No );
2107 if ( reply == QMessageBox::Yes )
2109 QApplication::setOverrideCursor( Qt::WaitCursor );
2111 QApplication::restoreOverrideCursor();
2112 updateAuxiliaryStoragePage();
2117 void QgsVectorLayerProperties::onAuxiliaryLayerDelete()
2123 const QString msg = tr(
"Are you sure you want to delete auxiliary storage for %1?" ).arg( mLayer->
name() );
2124 QMessageBox::StandardButton reply;
2125 reply = QMessageBox::question(
this,
"Delete Auxiliary Storage", msg, QMessageBox::Yes | QMessageBox::No );
2127 if ( reply == QMessageBox::Yes )
2129 QApplication::setOverrideCursor( Qt::WaitCursor );
2142 QApplication::restoreOverrideCursor();
2143 updateAuxiliaryStoragePage();
2148 void QgsVectorLayerProperties::onAuxiliaryLayerDeleteField()
2154 QList<QTreeWidgetItem *> items = mAuxiliaryStorageFieldsTree->selectedItems();
2155 if ( items.count() < 1 )
2159 const QTreeWidgetItem *item = items[0];
2162 def.
setName( item->text( 1 ) );
2172 const QString msg = tr(
"Are you sure you want to delete auxiliary field %1 for %2?" ).arg( item->text( 1 ), item->text( 0 ) );
2174 QMessageBox::StandardButton reply;
2175 const QString title = QObject::tr(
"Delete Auxiliary Field" );
2176 reply = QMessageBox::question(
this, title, msg, QMessageBox::Yes | QMessageBox::No );
2178 if ( reply == QMessageBox::Yes )
2180 QApplication::setOverrideCursor( Qt::WaitCursor );
2181 deleteAuxiliaryField( index );
2183 QApplication::restoreOverrideCursor();
2187 void QgsVectorLayerProperties::onAuxiliaryLayerAddField()
2194 if ( dlg.exec() == QDialog::Accepted )
2196 updateAuxiliaryStoragePage();
2200 void QgsVectorLayerProperties::deleteAuxiliaryField(
int index )
2213 if ( key >= 0 && def.
origin().compare(
"labeling", Qt::CaseInsensitive ) == 0
2220 updateAuxiliaryStoragePage();
2221 mSourceFieldsPropertiesDialog->
init();
2225 const QString title = QObject::tr(
"Delete Auxiliary Field" );
2227 const QString msg = QObject::tr(
"Unable to remove auxiliary field (%1)" ).arg( errors );
2228 mMessageBar->
pushMessage( title, msg, Qgis::MessageLevel::Warning );
static QString defaultProjectScales()
A string with default project scales.
void clearActions()
Removes all actions.
QUuid addAction(QgsAction::ActionType 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 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.
static QString nameFromProperty(const QgsPropertyDefinition &def, bool joined=false)
Returns the name of the auxiliary field for a property definition.
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()
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...
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.
@ SpatialIndexPresent
A valid spatial index exists for the source.
virtual 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.
QString typeName() const
Gets the field type.
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 QgsProviderSourceWidgetProviderRegistry * sourceWidgetProviderRegistry()
Returns the registry of provider source widget providers.
static QgsNative * nativePlatformInterface()
Returns the global native interface, which offers abstraction to the host OS's underlying public inte...
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.
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.
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.
A reusable dialog which allows users to select stored layer styles and categories to load for a map l...
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.
bool isDefault(const QString &styleName) const
Returns true if this is the default style.
QgsMapLayerStyle style(const QString &name) const
Returns data of a stored style - accessed by its unique name.
void currentStyleChanged(const QString ¤tName)
Emitted when the current style has been changed.
QString xmlData() const
Returns XML content of the style.
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.
virtual bool importNamedStyle(QDomDocument &doc, QString &errorMsg, QgsMapLayer::StyleCategories categories=QgsMapLayer::AllStyleCategories)
Import the properties of this layer from a QDomDocument.
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
QString attribution() const
Returns the attribution of the layer used by QGIS Server in GetCapabilities request.
QString id() const
Returns the layer's unique ID, which is used to access this layer from QgsProject.
virtual QString loadNamedMetadata(const QString &uri, bool &resultFlag)
Retrieve a named metadata for this layer if one exists (either as a .qmd file on disk or as a record ...
bool hasAutoRefreshEnabled() const
Returns true if auto refresh is enabled for the layer.
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 setAutoRefreshEnabled(bool enabled)
Sets whether auto refresh is enabled for the layer.
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.
QgsMapLayerServerProperties * serverProperties()
Returns QGIS Server Properties for the map layer.
void setDataUrl(const QString &dataUrl)
Sets the DataUrl of the layer used by QGIS Server in GetCapabilities request.
virtual QString saveDefaultStyle(bool &resultFlag)
Save the properties of this layer as the default style (either as a .qml file on disk or as a record ...
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.
virtual QString loadSldStyle(const QString &uri, bool &resultFlag)
Attempts to style the layer using the formatting from an SLD type file.
virtual QString saveDefaultMetadata(bool &resultFlag)
Save the current metadata of this layer as the default metadata (either as a .qmd file on disk or as ...
void setDataUrlFormat(const QString &dataUrlFormat)
Sets the DataUrl format of the layer used by QGIS Server in GetCapabilities request.
QString title() const
Returns the title of the layer used by QGIS Server in GetCapabilities request.
virtual QString styleURI() const
Retrieve the style URI for this layer (either as a .qml file on disk or as a record in the users styl...
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,...
static QString extensionPropertyType(PropertyType type)
Returns the extension of a Property.
void setName(const QString &name)
Set the display name of the layer.
void setAutoRefreshInterval(int interval)
Sets the auto refresh interval (in milliseconds) for the layer.
QString saveNamedMetadata(const QString &uri, bool &resultFlag)
Save the current metadata of this layer as a named metadata (either as a .qmd file on disk or as a re...
QString refreshOnNotifyMessage() const
Returns the message that should be notified by the provider to triggerRepaint.
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...
virtual QString metadataUri() const
Retrieve the metadata URI for this layer (either as a .qmd file on disk or as a record in the users s...
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.
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.
A base dialog for options and properties dialogs that offers vertical tabs.
void resizeAlltabs(int index)
Resizes all tabs when the dialog is resized.
void addPage(const QString &title, const QString &tooltip, const QIcon &icon, QWidget *widget, const QStringList &path=QStringList())
Adds a new page to the dialog pages.
virtual void optionsStackedWidget_CurrentChanged(int index)
Select relevant tab on current page change.
void insertPage(const QString &title, const QString &tooltip, const QIcon &icon, QWidget *widget, const QString &before, const QStringList &path=QStringList())
Inserts a new page into the dialog pages.
void restoreOptionsBaseUi(const QString &title=QString())
Restore the base ui.
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()
Returns 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.
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 isSaveAndLoadStyleToDatabaseSupported() const
It returns false by default.
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)
QgsVectorLayerProperties(QgsMapCanvas *canvas, QgsMessageBar *messageBar, QgsVectorLayer *lyr=nullptr, QWidget *parent=nullptr, Qt::WindowFlags fl=QgsGuiUtils::ModalDialogFlags)
void optionsStackedWidget_CurrentChanged(int index) override
void addPropertiesPageFactory(const QgsMapLayerConfigWidgetFactory *factory)
Adds a properties page factory to the vector layer properties dialog.
void toggleEditing(QgsMapLayer *)
void exportAuxiliaryLayer(QgsAuxiliaryLayer *layer)
The QgsVectorLayerSaveStyleDialog class provides the UI to save the current style or multiple styles ...
Represents a vector layer which manages a vector based data sets.
void setAuxiliaryLayer(QgsAuxiliaryLayer *layer=nullptr)
Sets the current auxiliary layer.
Q_INVOKABLE QgsWkbTypes::GeometryType geometryType() const
Returns point, line or polygon.
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.
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.
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...
virtual QString loadNamedStyle(const QString &theURI, bool &resultFlag, bool loadFromLocalDb, QgsMapLayer::StyleCategories categories=QgsMapLayer::AllStyleCategories)
Loads a named style from file/local db/datasource db.
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.
void setMapTipTemplate(const QString &mapTipTemplate)
The mapTip is a pretty, html representation for feature information.
virtual QString getStyleFromDatabase(const QString &styleId, QString &msgError)
Returns the named style corresponding to style id provided.
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 saveStyleToDatabase(const QString &name, const QString &description, bool useAsDefault, const QString &uiFileContent, QString &msgError)
Saves named and sld style of the layer to the style table in the db.
virtual void updateExtents(bool force=false)
Update the extents for the layer.
QgsActionManager * actions()
Returns all layer actions defined on this layer.
QString displayExpression
QgsVectorDataProvider * dataProvider() FINAL
Returns the layer's data provider, it may be nullptr.
QgsAttributeTableConfig attributeTableConfig() const
Returns the attribute table configuration object.
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 QList< QgsVectorLayerJoinInfo > vectorJoins() const
const QgsVectorSimplifyMethod & simplifyMethod() const
Returns the simplification settings for fast rendering of features.
QgsFeatureRenderer * renderer()
Returns the feature renderer used for rendering the features in the layer in 2D map views.
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 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.