70#include <QDesktopServices>
80#include <QColorDialog>
83#include <QRegularExpressionValidator>
95 , mMessageBar( messageBar )
97 , mOriginalSubsetSQL( lyr->subsetString() )
100 connect( pbnQueryBuilder, &QPushButton::clicked,
this, &QgsVectorLayerProperties::pbnQueryBuilder_clicked );
101 connect( pbnIndex, &QPushButton::clicked,
this, &QgsVectorLayerProperties::pbnIndex_clicked );
103 connect( pbnUpdateExtents, &QPushButton::clicked,
this, &QgsVectorLayerProperties::pbnUpdateExtents_clicked );
104 connect( mButtonAddJoin, &QPushButton::clicked,
this, &QgsVectorLayerProperties::mButtonAddJoin_clicked );
105 connect( mButtonEditJoin, &QPushButton::clicked,
this, &QgsVectorLayerProperties::mButtonEditJoin_clicked );
106 connect( mJoinTreeWidget, &QTreeWidget::itemDoubleClicked,
this, &QgsVectorLayerProperties::mJoinTreeWidget_itemDoubleClicked );
107 connect( mButtonRemoveJoin, &QPushButton::clicked,
this, &QgsVectorLayerProperties::mButtonRemoveJoin_clicked );
108 connect( mButtonAddWmsDimension, &QPushButton::clicked,
this, &QgsVectorLayerProperties::mButtonAddWmsDimension_clicked );
109 connect( mButtonEditWmsDimension, &QPushButton::clicked,
this, &QgsVectorLayerProperties::mButtonEditWmsDimension_clicked );
110 connect( mWmsDimensionsTreeWidget, &QTreeWidget::itemDoubleClicked,
this, &QgsVectorLayerProperties::mWmsDimensionsTreeWidget_itemDoubleClicked );
111 connect( mButtonRemoveWmsDimension, &QPushButton::clicked,
this, &QgsVectorLayerProperties::mButtonRemoveWmsDimension_clicked );
112 connect( mSimplifyDrawingGroupBox, &QGroupBox::toggled,
this, &QgsVectorLayerProperties::mSimplifyDrawingGroupBox_toggled );
113 connect( buttonRemoveMetadataUrl, &QPushButton::clicked,
this, &QgsVectorLayerProperties::removeSelectedMetadataUrl );
114 connect( buttonAddMetadataUrl, &QPushButton::clicked,
this, &QgsVectorLayerProperties::addMetadataUrl );
115 connect( buttonBox, &QDialogButtonBox::helpRequested,
this, &QgsVectorLayerProperties::showHelp );
122 mBtnStyle =
new QPushButton( tr(
"Style" ),
this );
123 QMenu *menuStyle =
new QMenu(
this );
124 mActionLoadStyle =
new QAction( tr(
"Load Style…" ),
this );
125 connect( mActionLoadStyle, &QAction::triggered,
this, &QgsVectorLayerProperties::loadStyle );
127 mActionSaveStyle =
new QAction( tr(
"Save Current Style…" ),
this );
128 connect( mActionSaveStyle, &QAction::triggered,
this, &QgsVectorLayerProperties::saveStyleAs );
130 mActionSaveMultipleStyles =
new QAction( tr(
"Save Multiple Styles…" ),
this );
131 connect( mActionSaveMultipleStyles, &QAction::triggered,
this, &QgsVectorLayerProperties::saveMultipleStylesAs );
133 mSourceGroupBox->hide();
135 mBtnStyle->setMenu( menuStyle );
136 connect( menuStyle, &QMenu::aboutToShow,
this, &QgsVectorLayerProperties::aboutToShowStyleMenu );
137 buttonBox->addButton( mBtnStyle, QDialogButtonBox::ResetRole );
139 mBtnMetadata =
new QPushButton( tr(
"Metadata" ),
this );
140 QMenu *menuMetadata =
new QMenu(
this );
141 mActionLoadMetadata = menuMetadata->addAction( tr(
"Load Metadata…" ),
this, &QgsVectorLayerProperties::loadMetadata );
142 mActionSaveMetadataAs = menuMetadata->addAction( tr(
"Save Metadata…" ),
this, &QgsVectorLayerProperties::saveMetadataAs );
143 menuMetadata->addSeparator();
144 menuMetadata->addAction( tr(
"Save as Default" ),
this, &QgsVectorLayerProperties::saveDefaultMetadata );
145 menuMetadata->addAction( tr(
"Restore Default" ),
this, &QgsVectorLayerProperties::loadDefaultMetadata );
146 mBtnMetadata->setMenu( menuMetadata );
147 buttonBox->addButton( mBtnMetadata, QDialogButtonBox::ResetRole );
151 connect( buttonBox->button( QDialogButtonBox::Apply ), &QAbstractButton::clicked,
this, &QgsVectorLayerProperties::apply );
152 connect(
this, &QDialog::accepted,
this, &QgsVectorLayerProperties::apply );
153 connect(
this, &QDialog::rejected,
this, &QgsVectorLayerProperties::onCancel );
161 mMapTipExpressionFieldWidget->setLayer( lyr );
162 mMapTipExpressionFieldWidget->registerExpressionContextGenerator(
this );
163 mDisplayExpressionWidget->setLayer( lyr );
164 mDisplayExpressionWidget->registerExpressionContextGenerator(
this );
166 connect( mInsertExpressionButton, &QAbstractButton::clicked,
this, &QgsVectorLayerProperties::insertFieldOrExpression );
171 QVBoxLayout *layout =
nullptr;
176 layout =
new QVBoxLayout( labelingFrame );
177 layout->setContentsMargins( 0, 0, 0, 0 );
179 labelingDialog->layout()->setContentsMargins( 0, 0, 0, 0 );
181 layout->addWidget( labelingDialog );
182 labelingFrame->setLayout( layout );
185 layout =
new QVBoxLayout( mMaskingFrame );
186 layout->setContentsMargins( 0, 0, 0, 0 );
187 mMaskingWidget =
new QgsMaskingWidget( mMaskingFrame );
188 mMaskingWidget->setLayer( mLayer );
189 mMaskingWidget->layout()->setContentsMargins( 0, 0, 0, 0 );
190 layout->addWidget( mMaskingWidget );
191 mMaskingFrame->setLayout( layout );
195 labelingDialog =
nullptr;
196 mOptsPage_Labels->setEnabled(
false );
197 mOptsPage_Masks->setEnabled(
false );
198 mGeomGroupBox->setEnabled(
false );
199 mGeomGroupBox->setVisible(
false );
200 mCrsGroupBox->setEnabled(
false );
201 mCrsGroupBox->setVisible(
false );
205 QVBoxLayout *actionLayout =
new QVBoxLayout( actionOptionsFrame );
206 actionLayout->setContentsMargins( 0, 0, 0, 0 );
208 mActionDialog->layout()->setContentsMargins( 0, 0, 0, 0 );
209 actionLayout->addWidget( mActionDialog );
212 mSourceFieldsPropertiesDialog->layout()->setContentsMargins( 0, 0, 0, 0 );
213 mSourceFieldsFrame->setLayout(
new QVBoxLayout( mSourceFieldsFrame ) );
214 mSourceFieldsFrame->layout()->setContentsMargins( 0, 0, 0, 0 );
215 mSourceFieldsFrame->layout()->addWidget( mSourceFieldsPropertiesDialog );
220 mAttributesFormPropertiesDialog->layout()->setContentsMargins( 0, 0, 0, 0 );
221 mAttributesFormFrame->setLayout(
new QVBoxLayout( mAttributesFormFrame ) );
222 mAttributesFormFrame->layout()->setContentsMargins( 0, 0, 0, 0 );
223 mAttributesFormFrame->layout()->addWidget( mAttributesFormPropertiesDialog );
226 QVBoxLayout *metadataLayout =
new QVBoxLayout( metadataFrame );
227 metadataLayout->setContentsMargins( 0, 0, 0, 0 );
229 mMetadataWidget->layout()->setContentsMargins( 0, 0, 0, 0 );
231 metadataLayout->addWidget( mMetadataWidget );
232 metadataFrame->setLayout( metadataLayout );
234 QVBoxLayout *temporalLayout =
new QVBoxLayout( temporalFrame );
235 temporalLayout->setContentsMargins( 0, 0, 0, 0 );
237 temporalLayout->addWidget( mTemporalWidget );
247 pbnIndex->setEnabled(
false );
251 pbnIndex->setEnabled(
false );
252 pbnIndex->setText( tr(
"Spatial Index Exists" ) );
259 int encindex = cboProviderEncoding->findText( enc );
262 cboProviderEncoding->insertItem( 0, enc );
265 cboProviderEncoding->setCurrentIndex( encindex );
267 else if ( mLayer->
providerType() == QLatin1String(
"ogr" ) )
272 cboProviderEncoding->setEnabled(
false );
277 mDataSourceEncodingFrame->hide();
281 mCrsSelector->setCrs( mLayer->
crs() );
284 const QList< QgsVectorLayerJoinInfo > &joins = mLayer->
vectorJoins();
287 addJoinToTreeWidget( join );
292 QVBoxLayout *diagLayout =
new QVBoxLayout( mDiagramFrame );
293 diagLayout->setContentsMargins( 0, 0, 0, 0 );
295 diagramPropertiesDialog->layout()->setContentsMargins( 0, 0, 0, 0 );
297 diagLayout->addWidget( diagramPropertiesDialog );
298 mDiagramFrame->setLayout( diagLayout );
301 mLegendWidget->setMapCanvas( mCanvas );
302 mLegendWidget->setLayer( mLayer );
303 mLegendConfigEmbeddedWidget->setLayer( mLayer );
306 mLayerShortNameLineEdit->setText( mLayer->
shortName() );
309 mLayerShortNameLineEdit->setValidator( shortNameValidator );
312 mLayerTitleLineEdit->setText( mLayer->
title() );
313 mLayerAbstractTextEdit->setPlainText( mLayer->
abstract() );
314 mLayerKeywordListLineEdit->setText( mLayer->
keywordList() );
315 mLayerDataUrlLineEdit->setText( mLayer->
dataUrl() );
316 mLayerDataUrlFormatComboBox->setCurrentIndex(
317 mLayerDataUrlFormatComboBox->findText(
322 mLayerAttributionLineEdit->setText( mLayer->
attribution() );
323 mLayerAttributionUrlLineEdit->setText( mLayer->
attributionUrl() );
326 tableViewMetadataUrl->setSelectionMode( QAbstractItemView::SingleSelection );
327 tableViewMetadataUrl->setSelectionBehavior( QAbstractItemView::SelectRows );
328 tableViewMetadataUrl->horizontalHeader()->setStretchLastSection(
true );
329 tableViewMetadataUrl->horizontalHeader()->setSectionResizeMode( QHeaderView::Stretch );
331 mMetadataUrlModel =
new QStandardItemModel( tableViewMetadataUrl );
332 mMetadataUrlModel->clear();
333 mMetadataUrlModel->setColumnCount( 3 );
334 QStringList metadataUrlHeaders;
335 metadataUrlHeaders << tr(
"URL" ) << tr(
"Type" ) << tr(
"Format" );
336 mMetadataUrlModel->setHorizontalHeaderLabels( metadataUrlHeaders );
337 tableViewMetadataUrl->setModel( mMetadataUrlModel );
338 tableViewMetadataUrl->setItemDelegate(
new MetadataUrlItemDelegate(
this ) );
343 const int row = mMetadataUrlModel->rowCount();
344 mMetadataUrlModel->setItem( row, 0,
new QStandardItem( metaUrl.url ) );
345 mMetadataUrlModel->setItem( row, 1,
new QStandardItem( metaUrl.type ) );
346 mMetadataUrlModel->setItem( row, 2,
new QStandardItem( metaUrl.format ) );
350 mLayerLegendUrlLineEdit->setText( mLayer->
legendUrl() );
351 mLayerLegendUrlFormatComboBox->setCurrentIndex(
352 mLayerLegendUrlFormatComboBox->findText(
359 const QList<QgsMapLayerServerProperties::WmsDimensionInfo> &wmsDims = serverProperties->
wmsDimensions();
362 addWmsDimensionInfoToTreeWidget( dim );
366 myStyle.append( QStringLiteral(
"body { margin: 10px; }\n " ) );
367 teMetadataViewer->clear();
368 teMetadataViewer->document()->setDefaultStyleSheet( myStyle );
369 teMetadataViewer->setHtml( htmlMetadata() );
370 teMetadataViewer->setOpenLinks(
false );
371 connect( teMetadataViewer, &QTextBrowser::anchorClicked,
this, &QgsVectorLayerProperties::urlClicked );
372 mMetadataFilled =
true;
377 if ( !settings.
contains( QStringLiteral(
"/Windows/VectorLayerProperties/tab" ) ) )
379 settings.
setValue( QStringLiteral(
"Windows/VectorLayerProperties/tab" ),
383 QString title = tr(
"Layer Properties — %1" ).arg( mLayer->
name() );
388 QList<QgsMapLayer *> dependencySources;
389 const QSet<QgsMapLayerDependency> constDependencies = mLayer->
dependencies();
394 dependencySources << layer;
400 connect(
QgsProject::instance(), &QObject::destroyed,
this, [ = ] {mLayersDependenciesTreeView->setModel(
nullptr );} );
401 mLayersDependenciesTreeView->setModel( mLayersDependenciesTreeModel );
403 connect( mRefreshLayerCheckBox, &QCheckBox::toggled, mRefreshLayerIntervalSpinBox, &QDoubleSpinBox::setEnabled );
406 QMenu *menu =
new QMenu(
this );
408 mAuxiliaryLayerActionNew =
new QAction( tr(
"Create" ),
this );
409 menu->addAction( mAuxiliaryLayerActionNew );
410 connect( mAuxiliaryLayerActionNew, &QAction::triggered,
this, &QgsVectorLayerProperties::onAuxiliaryLayerNew );
412 mAuxiliaryLayerActionClear =
new QAction( tr(
"Clear" ),
this );
413 menu->addAction( mAuxiliaryLayerActionClear );
414 connect( mAuxiliaryLayerActionClear, &QAction::triggered,
this, &QgsVectorLayerProperties::onAuxiliaryLayerClear );
416 mAuxiliaryLayerActionDelete =
new QAction( tr(
"Delete" ),
this );
417 menu->addAction( mAuxiliaryLayerActionDelete );
418 connect( mAuxiliaryLayerActionDelete, &QAction::triggered,
this, &QgsVectorLayerProperties::onAuxiliaryLayerDelete );
420 mAuxiliaryLayerActionExport =
new QAction( tr(
"Export" ),
this );
421 menu->addAction( mAuxiliaryLayerActionExport );
424 mAuxiliaryStorageActions->setMenu( menu );
426 connect( mAuxiliaryStorageFieldsDeleteBtn, &QPushButton::clicked,
this, &QgsVectorLayerProperties::onAuxiliaryLayerDeleteField );
427 connect( mAuxiliaryStorageFieldsAddBtn, &QPushButton::clicked,
this, &QgsVectorLayerProperties::onAuxiliaryLayerAddField );
429 updateAuxiliaryStoragePage();
431 mOptsPage_Information->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#information-properties" ) );
432 mOptsPage_Source->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#source-properties" ) );
433 mOptsPage_Style->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#symbology-properties" ) );
434 mOptsPage_Labels->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#labels-properties" ) );
435 mOptsPage_Masks->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#masks-properties" ) );
436 mOptsPage_Diagrams->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#diagrams-properties" ) );
437 mOptsPage_SourceFields->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#fields-properties" ) );
438 mOptsPage_AttributesForm->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#attributes-form-properties" ) );
439 mOptsPage_Joins->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#joins-properties" ) );
440 mOptsPage_AuxiliaryStorage->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#auxiliary-storage-properties" ) );
441 mOptsPage_Actions->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#actions-properties" ) );
442 mOptsPage_Display->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#display-properties" ) );
443 mOptsPage_Rendering->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#rendering-properties" ) );
444 mOptsPage_Temporal->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#temporal-properties" ) );
445 mOptsPage_Variables->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#variables-properties" ) );
446 mOptsPage_Metadata->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#metadata-properties" ) );
447 mOptsPage_DataDependencies->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#dependencies-properties" ) ) ;
448 mOptsPage_Legend->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#legend-properties" ) );
449 mOptsPage_Server->setProperty(
"helpPage", QStringLiteral(
"working_with_vector/vector_properties.html#qgis-server-properties" ) );
455void QgsVectorLayerProperties::toggleEditing()
460 emit toggleEditing( mLayer );
462 setPbnQueryBuilderEnabled();
476 mLayerPropertiesPages << page;
479 if ( beforePage.isEmpty() )
486void QgsVectorLayerProperties::insertFieldOrExpression()
490 QString expression = QStringLiteral(
"[% " );
491 expression += mMapTipExpressionFieldWidget->asExpression();
492 expression += QLatin1String(
" %]" );
494 mMapTipWidget->insertText( expression );
497void QgsVectorLayerProperties::addMetadataUrl()
499 const int row = mMetadataUrlModel->rowCount();
500 mMetadataUrlModel->setItem( row, 0,
new QStandardItem( QLatin1String() ) );
501 mMetadataUrlModel->setItem( row, 1,
new QStandardItem( QLatin1String() ) );
502 mMetadataUrlModel->setItem( row, 2,
new QStandardItem( QLatin1String() ) );
505void QgsVectorLayerProperties::removeSelectedMetadataUrl()
507 const QModelIndexList selectedRows = tableViewMetadataUrl->selectionModel()->selectedRows();
508 if ( selectedRows.empty() )
510 mMetadataUrlModel->removeRow( selectedRows[0].row() );
514void QgsVectorLayerProperties::syncToLayer()
516 if ( !mSourceWidget )
521 QHBoxLayout *layout =
new QHBoxLayout();
522 layout->addWidget( mSourceWidget );
523 mSourceGroupBox->setLayout( layout );
524 mSourceGroupBox->show();
528 buttonBox->button( QDialogButtonBox::Apply )->setEnabled( isValid );
529 buttonBox->button( QDialogButtonBox::Ok )->setEnabled( isValid );
538 mLayerOrigNameLineEdit->setText( mLayer->
name() );
539 mBackupCrs = mLayer->
crs();
541 mSubsetGroupBox->setEnabled(
true );
548 txtSubsetSQL->setReadOnly(
true );
549 txtSubsetSQL->setCaretWidth( 0 );
550 txtSubsetSQL->setCaretLineVisible(
false );
551 setPbnQueryBuilderEnabled();
559 mScaleRangeWidget->setMapCanvas( mCanvas );
562 mReferenceScaleWidget->setShowCurrentScaleButton(
true );
563 mReferenceScaleWidget->setMapCanvas( mCanvas );
564 if ( mUseReferenceScaleGroupBox->isChecked() )
567 mReferenceScaleWidget->setScale( mCanvas->
scale() );
572 mSimplifyDrawingSpinBox->setValue( simplifyMethod.
threshold() );
573 mSimplifyDrawingSpinBox->setClearValue( 1.0 );
575 QString remark = QStringLiteral(
" (%1)" ).arg( tr(
"Not supported" ) );
579 mSimplifyDrawingAtProvider->setChecked(
false );
580 mSimplifyDrawingAtProvider->setEnabled(
false );
581 if ( !mSimplifyDrawingAtProvider->text().endsWith( remark ) )
582 mSimplifyDrawingAtProvider->setText( mSimplifyDrawingAtProvider->text().append( remark ) );
587 mSimplifyDrawingAtProvider->setEnabled( mSimplifyDrawingGroupBox->isChecked() );
588 if ( mSimplifyDrawingAtProvider->text().endsWith( remark ) )
590 QString newText = mSimplifyDrawingAtProvider->text();
591 newText.chop( remark.size() );
592 mSimplifyDrawingAtProvider->setText( newText );
597 if ( mLayer->
geometryType() == Qgis::GeometryType::Point )
599 mSimplifyDrawingGroupBox->setChecked(
false );
600 mSimplifyDrawingGroupBox->setEnabled(
false );
607 mSimplifyAlgorithmComboBox->setCurrentIndex( mSimplifyAlgorithmComboBox->findData( simplifyMethod.
simplifyAlgorithm() ) );
610 myScalesList.append( QStringLiteral(
"1:1" ) );
611 mSimplifyMaximumScaleComboBox->updateScales( myScalesList );
612 mSimplifyMaximumScaleComboBox->setScale( simplifyMethod.
maximumScale() );
626 updateSymbologyPage();
630 if ( labelingDialog )
633 mSourceFieldsPropertiesDialog->
init();
634 mAttributesFormPropertiesDialog->
init();
637 updateVariableEditor();
639 if ( diagramPropertiesDialog )
643 const auto constMLayerPropertiesPages = mLayerPropertiesPages;
646 page->syncToLayer( mLayer );
653 mLegendWidget->setLayer( mLayer );
657void QgsVectorLayerProperties::apply()
661 const QString newSource = mSourceWidget->
sourceUri();
662 if ( newSource != mLayer->
source() )
669 if ( labelingDialog )
673 mBackupCrs = mLayer->
crs();
675 mLegendWidget->applyToLayer();
676 mLegendConfigEmbeddedWidget->applyToLayer();
680 mMetadataFilled =
false;
683 if ( mMaskingWidget && mMaskingWidget->hasBeenPopulated() )
684 mMaskingWidget->apply();
689 mSubsetGroupBox->setEnabled(
true );
695 mMetadataFilled =
false;
717 const auto constActions = mActionDialog->
actions();
718 for (
const QgsAction &action : constActions )
725 QVector<QgsAttributeTableConfig::ColumnConfig> columns = attributeTableConfig.
columns();
727 for (
int i = 0; i < columns.size(); ++i )
739 mLayer->
setName( mLayerOrigNameLineEdit->text() );
741 mAttributesFormPropertiesDialog->
apply();
742 mSourceFieldsPropertiesDialog->
apply();
754 diagramPropertiesDialog->
apply();
757 const auto constMLayerPropertiesPages = mLayerPropertiesPages;
764 if ( mLayer->
shortName() != mLayerShortNameLineEdit->text() )
765 mMetadataFilled =
false;
766 mLayer->
setShortName( mLayerShortNameLineEdit->text() );
768 if ( mLayer->
title() != mLayerTitleLineEdit->text() )
769 mMetadataFilled =
false;
770 mLayer->
setTitle( mLayerTitleLineEdit->text() );
772 if ( mLayer->
abstract() != mLayerAbstractTextEdit->toPlainText() )
773 mMetadataFilled =
false;
774 mLayer->
setAbstract( mLayerAbstractTextEdit->toPlainText() );
776 if ( mLayer->
keywordList() != mLayerKeywordListLineEdit->text() )
777 mMetadataFilled =
false;
780 if ( mLayer->
dataUrl() != mLayerDataUrlLineEdit->text() )
781 mMetadataFilled =
false;
782 mLayer->
setDataUrl( mLayerDataUrlLineEdit->text() );
784 if ( mLayer->
dataUrlFormat() != mLayerDataUrlFormatComboBox->currentText() )
785 mMetadataFilled =
false;
789 if ( mLayer->
attribution() != mLayerAttributionLineEdit->text() )
790 mMetadataFilled =
false;
793 if ( mLayer->
attributionUrl() != mLayerAttributionUrlLineEdit->text() )
794 mMetadataFilled =
false;
798 QList<QgsMapLayerServerProperties::MetadataUrl> metaUrls;
799 for (
int row = 0; row < mMetadataUrlModel->rowCount() ; row++ )
802 metaUrl.
url = mMetadataUrlModel->item( row, 0 )->text();
803 metaUrl.
type = mMetadataUrlModel->item( row, 1 )->text();
804 metaUrl.
format = mMetadataUrlModel->item( row, 2 )->text();
805 metaUrls.append( metaUrl );
806 mMetadataFilled =
false;
811 if ( mLayer->
legendUrl() != mLayerLegendUrlLineEdit->text() )
812 mMetadataFilled =
false;
813 mLayer->
setLegendUrl( mLayerLegendUrlLineEdit->text() );
815 if ( mLayer->
legendUrlFormat() != mLayerLegendUrlFormatComboBox->currentText() )
816 mMetadataFilled =
false;
821 if ( mSimplifyDrawingGroupBox->isChecked() )
829 simplifyMethod.
setThreshold( mSimplifyDrawingSpinBox->value() );
831 simplifyMethod.
setMaximumScale( mSimplifyMaximumScaleComboBox->scale() );
844 mLayer->
setRefreshOnNofifyMessage( mNotificationMessageCheckBox->isChecked() ? mNotifyMessagValueLineEdit->text() : QString() );
850 updateVariableEditor();
853 QSet<QgsMapLayerDependency> deps;
854 const auto checkedLayers = mLayersDependenciesTreeModel->
checkedLayers();
859 QMessageBox::warning(
nullptr, tr(
"Save Dependency" ), tr(
"This configuration introduces a cycle in data dependencies and will be ignored." ) );
867void QgsVectorLayerProperties::onCancel()
874 const auto constVectorJoins = mLayer->
vectorJoins();
894 QDomDocument doc( QStringLiteral(
"qgis" ) );
895 int errorLine, errorColumn;
896 doc.setContent( mOldStyle.
xmlData(),
false, &myMessage, &errorLine, &errorColumn );
900 if ( mBackupCrs != mLayer->
crs() )
901 mLayer->
setCrs( mBackupCrs );
904void QgsVectorLayerProperties::urlClicked(
const QUrl &url )
906 QFileInfo file( url.toLocalFile() );
907 if ( file.exists() && !file.isDir() )
910 QDesktopServices::openUrl( url );
913void QgsVectorLayerProperties::pbnQueryBuilder_clicked()
922 if ( dialog->exec() )
936void QgsVectorLayerProperties::pbnIndex_clicked()
941 setCursor( Qt::WaitCursor );
943 setCursor( Qt::ArrowCursor );
946 pbnIndex->setEnabled(
false );
947 pbnIndex->setText( tr(
"Spatial Index Exists" ) );
948 QMessageBox::information(
this, tr(
"Spatial Index" ), tr(
"Creation of spatial index successful" ) );
952 QMessageBox::warning(
this, tr(
"Spatial Index" ), tr(
"Creation of spatial index failed" ) );
957QString QgsVectorLayerProperties::htmlMetadata()
967 mMetadataFilled =
false;
971void QgsVectorLayerProperties::loadDefaultStyle_clicked()
974 bool defaultLoadedFlag =
false;
981 QMessageBox askToUser;
982 askToUser.setText( tr(
"Load default style from: " ) );
983 askToUser.setIcon( QMessageBox::Question );
984 askToUser.addButton( tr(
"Cancel" ), QMessageBox::RejectRole );
985 askToUser.addButton( tr(
"Local Database" ), QMessageBox::NoRole );
986 askToUser.addButton( tr(
"Datasource Database" ), QMessageBox::YesRole );
988 switch ( askToUser.exec() )
994 if ( !defaultLoadedFlag )
997 QMessageBox::information(
this, tr(
"Default Style" ), msg );
999 if ( msg.compare( tr(
"Loaded from Provider" ) ) )
1001 QMessageBox::information(
this, tr(
"Default Style" ),
1002 tr(
"No default style was found for this layer." ) );
1018 if ( defaultLoadedFlag )
1026 QMessageBox::information(
this, tr(
"Default Style" ), myMessage );
1030void QgsVectorLayerProperties::saveDefaultStyle_clicked()
1039 QMessageBox askToUser;
1040 askToUser.setText( tr(
"Save default style to: " ) );
1041 askToUser.setIcon( QMessageBox::Question );
1042 askToUser.addButton( tr(
"Cancel" ), QMessageBox::RejectRole );
1043 askToUser.addButton( tr(
"Local Database" ), QMessageBox::NoRole );
1044 askToUser.addButton( tr(
"Datasource Database" ), QMessageBox::YesRole );
1046 switch ( askToUser.exec() )
1052 QString errorMessage;
1055 if ( QMessageBox::question(
nullptr, QObject::tr(
"Save style in database" ),
1056 QObject::tr(
"A matching style already exists in the database for this layer. Do you want to overwrite it?" ),
1057 QMessageBox::Yes | QMessageBox::No ) == QMessageBox::No )
1062 else if ( !errorMessage.isEmpty() )
1064 QMessageBox::warning(
nullptr, QObject::tr(
"Save style in database" ),
1070 if ( errorMsg.isNull() )
1081 bool defaultSavedFlag =
false;
1087 if ( !defaultSavedFlag )
1089 QMessageBox::warning(
this, tr(
"Default Style" ), errorMsg );
1093void QgsVectorLayerProperties::loadMetadata()
1096 QString myLastUsedDir = myQSettings.
value( QStringLiteral(
"style/lastStyleDir" ), QDir::homePath() ).toString();
1098 QString myFileName = QFileDialog::getOpenFileName(
this, tr(
"Load Layer Metadata from Metadata File" ), myLastUsedDir,
1099 tr(
"QGIS Layer Metadata File" ) +
" (*.qmd)" );
1100 if ( myFileName.isNull() )
1106 bool defaultLoadedFlag =
false;
1110 if ( defaultLoadedFlag )
1117 QMessageBox::warning(
this, tr(
"Load Metadata" ), myMessage );
1120 QFileInfo myFI( myFileName );
1121 QString myPath = myFI.path();
1122 myQSettings.
setValue( QStringLiteral(
"style/lastStyleDir" ), myPath );
1127void QgsVectorLayerProperties::saveMetadataAs()
1130 QString myLastUsedDir = myQSettings.
value( QStringLiteral(
"style/lastStyleDir" ), QDir::homePath() ).toString();
1132 QString myOutputFileName = QFileDialog::getSaveFileName(
this, tr(
"Save Layer Metadata as QMD" ),
1133 myLastUsedDir, tr(
"QMD File" ) +
" (*.qmd)" );
1134 if ( myOutputFileName.isNull() )
1148 bool defaultLoadedFlag =
false;
1152 if ( defaultLoadedFlag )
1159 QMessageBox::information(
this, tr(
"Save Metadata" ), myMessage );
1162 QFileInfo myFI( myOutputFileName );
1163 QString myPath = myFI.path();
1165 myQSettings.
setValue( QStringLiteral(
"style/lastStyleDir" ), myPath );
1168void QgsVectorLayerProperties::saveDefaultMetadata()
1172 bool defaultSavedFlag =
false;
1174 if ( !defaultSavedFlag )
1176 QMessageBox::warning(
this, tr(
"Default Metadata" ), errorMsg );
1180void QgsVectorLayerProperties::loadDefaultMetadata()
1182 bool defaultLoadedFlag =
false;
1185 if ( defaultLoadedFlag )
1191 QMessageBox::information(
this, tr(
"Default Metadata" ), myMessage );
1196void QgsVectorLayerProperties::saveStyleAs()
1207 bool defaultLoadedFlag =
false;
1208 QString errorMessage;
1210 StyleType type = dlg.currentStyleType();
1216 QString filePath = dlg.outputFilePath();
1218 errorMessage = mLayer->
saveNamedStyle( filePath, defaultLoadedFlag, dlg.styleCategories() );
1222 errorMessage = mLayer->
saveSldStyleV2( defaultLoadedFlag, sldContext );
1226 if ( defaultLoadedFlag )
1233 QMessageBox::information(
this, tr(
"Save Style" ), errorMessage );
1240 QString infoWindowTitle = QObject::tr(
"Save style to DB (%1)" ).arg( mLayer->
providerType() );
1246 if ( QMessageBox::question(
nullptr, QObject::tr(
"Save style in database" ),
1247 QObject::tr(
"A matching style already exists in the database for this layer. Do you want to overwrite it?" ),
1248 QMessageBox::Yes | QMessageBox::No ) == QMessageBox::No )
1253 else if ( !errorMessage.isEmpty() )
1255 mMessageBar->
pushMessage( infoWindowTitle, errorMessage, Qgis::MessageLevel::Warning );
1261 if ( !errorMessage.isNull() )
1263 mMessageBar->
pushMessage( infoWindowTitle, errorMessage, Qgis::MessageLevel::Warning );
1267 mMessageBar->
pushMessage( infoWindowTitle, tr(
"Style saved" ), Qgis::MessageLevel::Success );
1273 QString infoWindowTitle = tr(
"Save default style to local database" );
1274 errorMessage = mLayer->
saveDefaultStyle( defaultLoadedFlag, dlg.styleCategories() );
1275 if ( !defaultLoadedFlag )
1277 mMessageBar->
pushMessage( infoWindowTitle, errorMessage, Qgis::MessageLevel::Warning );
1281 mMessageBar->
pushMessage( infoWindowTitle, tr(
"Style saved" ), Qgis::MessageLevel::Success );
1289void QgsVectorLayerProperties::saveMultipleStylesAs()
1292 dlg.setSaveOnlyCurrentStyle(
false );
1301 const QListWidget *stylesWidget { dlg.stylesWidget() };
1304 QStringList stylesSelected;
1305 for (
int i = 0; i < stylesWidget->count(); i++ )
1307 if ( stylesWidget->item( i )->checkState() == Qt::CheckState::Checked )
1309 stylesSelected.push_back( stylesWidget->item( i )->text() );
1313 if ( ! stylesSelected.isEmpty() )
1316 for (
const QString &styleName : std::as_const( stylesSelected ) )
1318 bool defaultLoadedFlag =
false;
1320 StyleType type = dlg.currentStyleType();
1328 const QString filePath { dlg.outputFilePath() };
1329 QString safePath { filePath };
1330 if ( styleIndex > 0 && stylesSelected.count( ) > 1 )
1333 while ( QFile::exists( safePath ) )
1335 const QFileInfo fi { filePath };
1336 safePath = QString( filePath ).replace(
'.' + fi.completeSuffix(),
1337 QStringLiteral(
"_%1.%2" ).arg( QString::number( i ), fi.completeSuffix() ) );
1342 message = mLayer->
saveNamedStyle( safePath, defaultLoadedFlag, dlg.styleCategories() );
1344 message = mLayer->
saveSldStyle( safePath, defaultLoadedFlag );
1347 if ( defaultLoadedFlag )
1354 QMessageBox::information(
this, tr(
"Save Style" ), message );
1361 QString infoWindowTitle = QObject::tr(
"Save style '%1' to DB (%2)" )
1368 QString name { dbSettings.
name };
1369 if ( name.isEmpty() )
1375 QStringList ids, names, descriptions;
1378 while ( names.contains( name ) )
1380 name = QStringLiteral(
"%1 %2" ).arg( name, QString::number( i ) );
1385 QString errorMessage;
1388 if ( QMessageBox::question(
nullptr, QObject::tr(
"Save style in database" ),
1389 QObject::tr(
"A matching style already exists in the database for this layer. Do you want to overwrite it?" ),
1390 QMessageBox::Yes | QMessageBox::No ) == QMessageBox::No )
1395 else if ( !errorMessage.isEmpty() )
1397 mMessageBar->
pushMessage( infoWindowTitle, errorMessage, Qgis::MessageLevel::Warning );
1403 if ( !msgError.isNull() )
1405 mMessageBar->
pushMessage( infoWindowTitle, msgError, Qgis::MessageLevel::Warning );
1409 mMessageBar->
pushMessage( infoWindowTitle, tr(
"Style '%1' saved" ).arg( styleName ),
1410 Qgis::MessageLevel::Success );
1425void QgsVectorLayerProperties::aboutToShowStyleMenu()
1428 QMenu *m = qobject_cast<QMenu *>( sender() );
1431 m->addAction( mActionLoadStyle );
1432 m->addAction( mActionSaveStyle );
1437 mActionSaveStyle->setText( tr(
"Save Current Style…" ) );
1438 m->addAction( mActionSaveMultipleStyles );
1442 mActionSaveStyle->setText( tr(
"Save Style…" ) );
1446 m->addAction( tr(
"Save as Default" ),
this, &QgsVectorLayerProperties::saveDefaultStyle_clicked );
1447 m->addAction( tr(
"Restore Default" ),
this, &QgsVectorLayerProperties::loadDefaultStyle_clicked );
1454void QgsVectorLayerProperties::loadStyle()
1459 QStringList ids, names, descriptions;
1464 dlg.initializeLists( ids, names, descriptions, sectionLimit );
1469 QgsMapLayer::StyleCategories categories = dlg.styleCategories();
1470 StyleType type = dlg.currentStyleType();
1471 bool defaultLoadedFlag =
false;
1477 QString filePath = dlg.filePath();
1480 errorMsg = mLayer->
loadSldStyle( filePath, defaultLoadedFlag );
1484 errorMsg = mLayer->
loadNamedStyle( filePath, defaultLoadedFlag,
true, categories );
1487 if ( defaultLoadedFlag )
1494 QMessageBox::warning(
this, tr(
"Load Style" ), errorMsg );
1500 QString selectedStyleId = dlg.selectedStyleId();
1503 if ( !errorMsg.isNull() )
1505 QMessageBox::warning(
this, tr(
"Load Styles from Database" ), errorMsg );
1509 QDomDocument myDocument( QStringLiteral(
"qgis" ) );
1510 myDocument.setContent( qmlStyle );
1518 QMessageBox::warning(
this, tr(
"Load Styles from Database" ),
1519 tr(
"The retrieved style is not a valid named style. Error message: %1" )
1528 if ( defaultLoadedFlag )
1534 QMessageBox::warning(
this, tr(
"Load Default Style" ), errorMsg );
1543void QgsVectorLayerProperties::mButtonAddJoin_clicked()
1548 QList<QgsMapLayer *> joinedLayers;
1549 const QList< QgsVectorLayerJoinInfo > &joins = mLayer->
vectorJoins();
1550 joinedLayers.reserve( joins.size() );
1551 for (
int i = 0; i < joins.size(); ++i )
1553 joinedLayers.append( joins[i].joinLayer() );
1557 if ( d.exec() == QDialog::Accepted )
1561 if ( d.createAttributeIndex() )
1570 addJoinToTreeWidget( info );
1571 setPbnQueryBuilderEnabled();
1572 mSourceFieldsPropertiesDialog->
init();
1573 mAttributesFormPropertiesDialog->
init();
1577void QgsVectorLayerProperties::mButtonEditJoin_clicked()
1579 QTreeWidgetItem *currentJoinItem = mJoinTreeWidget->currentItem();
1580 mJoinTreeWidget_itemDoubleClicked( currentJoinItem, 0 );
1583void QgsVectorLayerProperties::mJoinTreeWidget_itemDoubleClicked( QTreeWidgetItem *item,
int )
1585 if ( !mLayer || !item )
1590 QList<QgsMapLayer *> joinedLayers;
1591 QString joinLayerId = item->data( 0, Qt::UserRole ).toString();
1592 const QList< QgsVectorLayerJoinInfo > &joins = mLayer->
vectorJoins();
1594 for (
int i = 0; i < joins.size(); ++i )
1600 if ( joinLayer->
id() == joinLayerId )
1607 joinedLayers.append( joinLayer );
1616 d.setWindowTitle( tr(
"Edit Vector Join" ) );
1617 d.setJoinInfo( joins[j] );
1619 if ( d.exec() == QDialog::Accepted )
1625 int idx = mJoinTreeWidget->indexOfTopLevelItem( item );
1626 mJoinTreeWidget->takeTopLevelItem( idx );
1631 if ( d.createAttributeIndex() )
1640 addJoinToTreeWidget( info, idx );
1642 setPbnQueryBuilderEnabled();
1643 mSourceFieldsPropertiesDialog->
init();
1644 mAttributesFormPropertiesDialog->
init();
1648void QgsVectorLayerProperties::addJoinToTreeWidget(
const QgsVectorLayerJoinInfo &join,
const int insertIndex )
1650 QTreeWidgetItem *joinItem =
new QTreeWidgetItem();
1651 joinItem->setFlags( Qt::ItemIsEnabled );
1654 if ( !mLayer || !joinLayer )
1659 joinItem->setText( 0, tr(
"Join layer" ) );
1665 joinItem->setText( 1, joinLayer->
name() );
1667 QFont f = joinItem->font( 0 );
1669 joinItem->setFont( 0, f );
1670 joinItem->setFont( 1, f );
1672 joinItem->setData( 0, Qt::UserRole, join.
joinLayerId() );
1674 QTreeWidgetItem *childJoinField =
new QTreeWidgetItem();
1675 childJoinField->setText( 0, tr(
"Join field" ) );
1677 childJoinField->setFlags( Qt::ItemIsEnabled );
1678 joinItem->addChild( childJoinField );
1680 QTreeWidgetItem *childTargetField =
new QTreeWidgetItem();
1681 childTargetField->setText( 0, tr(
"Target field" ) );
1683 joinItem->addChild( childTargetField );
1685 QTreeWidgetItem *childMemCache =
new QTreeWidgetItem();
1686 childMemCache->setText( 0, tr(
"Cache join layer in virtual memory" ) );
1688 childMemCache->setText( 1, QChar( 0x2714 ) );
1689 joinItem->addChild( childMemCache );
1691 QTreeWidgetItem *childDynForm =
new QTreeWidgetItem();
1692 childDynForm->setText( 0, tr(
"Dynamic form" ) );
1694 childDynForm->setText( 1, QChar( 0x2714 ) );
1695 joinItem->addChild( childDynForm );
1697 QTreeWidgetItem *childEditable =
new QTreeWidgetItem();
1698 childEditable->setText( 0, tr(
"Editable join layer" ) );
1700 childEditable->setText( 1, QChar( 0x2714 ) );
1701 joinItem->addChild( childEditable );
1703 QTreeWidgetItem *childUpsert =
new QTreeWidgetItem();
1704 childUpsert->setText( 0, tr(
"Upsert on edit" ) );
1706 childUpsert->setText( 1, QChar( 0x2714 ) );
1707 joinItem->addChild( childUpsert );
1709 QTreeWidgetItem *childCascade =
new QTreeWidgetItem();
1710 childCascade->setText( 0, tr(
"Delete cascade" ) );
1712 childCascade->setText( 1, QChar( 0x2714 ) );
1713 joinItem->addChild( childCascade );
1715 QTreeWidgetItem *childPrefix =
new QTreeWidgetItem();
1716 childPrefix->setText( 0, tr(
"Custom field name prefix" ) );
1717 childPrefix->setText( 1, join.
prefix() );
1718 joinItem->addChild( childPrefix );
1720 QTreeWidgetItem *childFields =
new QTreeWidgetItem();
1721 childFields->setText( 0, tr(
"Joined fields" ) );
1724 childFields->setText( 1, QLocale().toString( list->count() ) );
1726 childFields->setText( 1, tr(
"all" ) );
1727 joinItem->addChild( childFields );
1729 if ( insertIndex >= 0 )
1730 mJoinTreeWidget->insertTopLevelItem( insertIndex, joinItem );
1732 mJoinTreeWidget->addTopLevelItem( joinItem );
1734 mJoinTreeWidget->setCurrentItem( joinItem );
1735 mJoinTreeWidget->header()->setSectionResizeMode( QHeaderView::ResizeToContents );
1745 QDialog *dlg =
new QDialog();
1746 QString key = QStringLiteral(
"/UI/paneldialog/%1" ).arg( panel->
panelTitle() );
1748 dlg->restoreGeometry( settings.
value( key ).toByteArray() );
1750 dlg->setLayout(
new QVBoxLayout() );
1751 dlg->layout()->addWidget( panel );
1752 QDialogButtonBox *buttonBox =
new QDialogButtonBox( QDialogButtonBox::Ok );
1753 connect( buttonBox, &QDialogButtonBox::accepted, dlg, &QDialog::accept );
1754 dlg->layout()->addWidget( buttonBox );
1756 settings.
setValue( key, dlg->saveGeometry() );
1760void QgsVectorLayerProperties::mButtonRemoveJoin_clicked()
1762 QTreeWidgetItem *currentJoinItem = mJoinTreeWidget->currentItem();
1763 if ( !mLayer || !currentJoinItem )
1768 mLayer->
removeJoin( currentJoinItem->data( 0, Qt::UserRole ).toString() );
1769 mJoinTreeWidget->takeTopLevelItem( mJoinTreeWidget->indexOfTopLevelItem( currentJoinItem ) );
1770 setPbnQueryBuilderEnabled();
1771 mSourceFieldsPropertiesDialog->
init();
1772 mAttributesFormPropertiesDialog->
init();
1776void QgsVectorLayerProperties::mButtonAddWmsDimension_clicked()
1782 QStringList alreadyDefinedDimensions;
1784 const QList<QgsMapLayerServerProperties::WmsDimensionInfo> &dims = serverProperties->
wmsDimensions();
1787 alreadyDefinedDimensions << dim.name;
1791 if ( d.exec() == QDialog::Accepted )
1796 addWmsDimensionInfoToTreeWidget( info );
1800void QgsVectorLayerProperties::mButtonEditWmsDimension_clicked()
1802 QTreeWidgetItem *currentWmsDimensionItem = mWmsDimensionsTreeWidget->currentItem();
1803 mWmsDimensionsTreeWidget_itemDoubleClicked( currentWmsDimensionItem, 0 );
1806void QgsVectorLayerProperties::mWmsDimensionsTreeWidget_itemDoubleClicked( QTreeWidgetItem *item,
int )
1808 if ( !mLayer || !item )
1813 QString wmsDimName = item->data( 0, Qt::UserRole ).toString();
1815 const QList<QgsMapLayerServerProperties::WmsDimensionInfo> &dims = serverProperties->
wmsDimensions();
1816 QStringList alreadyDefinedDimensions;
1818 for (
int i = 0; i < dims.size(); ++i )
1820 QString dimName = dims[i].name;
1821 if ( dimName == wmsDimName )
1827 alreadyDefinedDimensions << dimName;
1836 d.setWindowTitle( tr(
"Edit WMS Dimension" ) );
1837 d.setInfo( dims[j] );
1839 if ( d.exec() == QDialog::Accepted )
1846 int idx = mWmsDimensionsTreeWidget->indexOfTopLevelItem( item );
1847 mWmsDimensionsTreeWidget->takeTopLevelItem( idx );
1851 addWmsDimensionInfoToTreeWidget( info, idx );
1857 QTreeWidgetItem *wmsDimensionItem =
new QTreeWidgetItem();
1858 wmsDimensionItem->setFlags( Qt::ItemIsEnabled );
1860 wmsDimensionItem->setText( 0, tr(
"Dimension" ) );
1861 wmsDimensionItem->setText( 1, wmsDim.
name );
1863 QFont f = wmsDimensionItem->font( 0 );
1865 wmsDimensionItem->setFont( 0, f );
1866 wmsDimensionItem->setFont( 1, f );
1868 wmsDimensionItem->setData( 0, Qt::UserRole, wmsDim.
name );
1870 QTreeWidgetItem *childWmsDimensionField =
new QTreeWidgetItem();
1871 childWmsDimensionField->setText( 0, tr(
"Field" ) );
1872 childWmsDimensionField->setText( 1, wmsDim.
fieldName );
1873 childWmsDimensionField->setFlags( Qt::ItemIsEnabled );
1874 wmsDimensionItem->addChild( childWmsDimensionField );
1876 QTreeWidgetItem *childWmsDimensionEndField =
new QTreeWidgetItem();
1877 childWmsDimensionEndField->setText( 0, tr(
"End field" ) );
1878 childWmsDimensionEndField->setText( 1, wmsDim.
endFieldName );
1879 childWmsDimensionEndField->setFlags( Qt::ItemIsEnabled );
1880 wmsDimensionItem->addChild( childWmsDimensionEndField );
1882 QTreeWidgetItem *childWmsDimensionUnits =
new QTreeWidgetItem();
1883 childWmsDimensionUnits->setText( 0, tr(
"Units" ) );
1884 childWmsDimensionUnits->setText( 1, wmsDim.
units );
1885 childWmsDimensionUnits->setFlags( Qt::ItemIsEnabled );
1886 wmsDimensionItem->addChild( childWmsDimensionUnits );
1888 QTreeWidgetItem *childWmsDimensionUnitSymbol =
new QTreeWidgetItem();
1889 childWmsDimensionUnitSymbol->setText( 0, tr(
"Unit symbol" ) );
1890 childWmsDimensionUnitSymbol->setText( 1, wmsDim.
unitSymbol );
1891 childWmsDimensionUnitSymbol->setFlags( Qt::ItemIsEnabled );
1892 wmsDimensionItem->addChild( childWmsDimensionUnitSymbol );
1894 QTreeWidgetItem *childWmsDimensionDefaultValue =
new QTreeWidgetItem();
1895 childWmsDimensionDefaultValue->setText( 0, tr(
"Default display" ) );
1897 childWmsDimensionDefaultValue->setFlags( Qt::ItemIsEnabled );
1898 wmsDimensionItem->addChild( childWmsDimensionDefaultValue );
1900 QTreeWidgetItem *childWmsDimensionRefValue =
new QTreeWidgetItem();
1901 childWmsDimensionRefValue->setText( 0, tr(
"Reference value" ) );
1902 childWmsDimensionRefValue->setText( 1, wmsDim.
referenceValue.toString() );
1903 childWmsDimensionRefValue->setFlags( Qt::ItemIsEnabled );
1904 wmsDimensionItem->addChild( childWmsDimensionRefValue );
1906 if ( insertIndex >= 0 )
1907 mWmsDimensionsTreeWidget->insertTopLevelItem( insertIndex, wmsDimensionItem );
1909 mWmsDimensionsTreeWidget->addTopLevelItem( wmsDimensionItem );
1911 mWmsDimensionsTreeWidget->setCurrentItem( wmsDimensionItem );
1912 mWmsDimensionsTreeWidget->header()->setSectionResizeMode( QHeaderView::ResizeToContents );
1915void QgsVectorLayerProperties::mButtonRemoveWmsDimension_clicked()
1917 QTreeWidgetItem *currentWmsDimensionItem = mWmsDimensionsTreeWidget->currentItem();
1918 if ( !mLayer || !currentWmsDimensionItem )
1924 serverProperties->
removeWmsDimension( currentWmsDimensionItem->data( 0, Qt::UserRole ).toString() );
1925 mWmsDimensionsTreeWidget->takeTopLevelItem( mWmsDimensionsTreeWidget->indexOfTopLevelItem( currentWmsDimensionItem ) );
1929void QgsVectorLayerProperties::updateSymbologyPage()
1933 delete mRendererDialog;
1934 mRendererDialog =
nullptr;
1950 mOptsPage_Style->setEnabled(
false );
1953 if ( mRendererDialog )
1955 mRendererDialog->layout()->setContentsMargins( 0, 0, 0, 0 );
1956 widgetStackRenderers->addWidget( mRendererDialog );
1957 widgetStackRenderers->setCurrentWidget( mRendererDialog );
1958 widgetStackRenderers->currentWidget()->layout()->setContentsMargins( 0, 0, 0, 0 );
1962void QgsVectorLayerProperties::setPbnQueryBuilderEnabled()
1964 pbnQueryBuilder->setEnabled( mLayer &&
1971 pbnQueryBuilder->setToolTip( tr(
"Stop editing mode to enable this." ) );
1976void QgsVectorLayerProperties::pbnUpdateExtents_clicked()
1979 mMetadataFilled =
false;
1986 bool isMetadataPanel = ( index ==
mOptStackedWidget->indexOf( mOptsPage_Metadata ) );
1987 mBtnStyle->setVisible( ! isMetadataPanel );
1988 mBtnMetadata->setVisible( isMetadataPanel );
1990 if ( index ==
mOptStackedWidget->indexOf( mOptsPage_Information ) && ! mMetadataFilled )
1993 teMetadataViewer->clear();
1994 teMetadataViewer->setHtml( htmlMetadata() );
1995 mMetadataFilled =
true;
2001void QgsVectorLayerProperties::mSimplifyDrawingGroupBox_toggled(
bool checked )
2006 mSimplifyDrawingAtProvider->setEnabled(
false );
2010 mSimplifyDrawingAtProvider->setEnabled( checked );
2014void QgsVectorLayerProperties::updateVariableEditor()
2017 mVariableEditor->setContext( &context );
2021 mVariableEditor->reloadContext();
2022 mVariableEditor->setEditableScopeIndex( 2 );
2025void QgsVectorLayerProperties::showHelp()
2027 const QVariant helpPage = mOptionsStackedWidget->currentWidget()->property(
"helpPage" );
2029 if ( helpPage.isValid() )
2035 QgsHelp::openHelp( QStringLiteral(
"working_with_vector/vector_properties.html" ) );
2039void QgsVectorLayerProperties::updateAuxiliaryStoragePage()
2046 mAuxiliaryStorageInformationGrpBox->setEnabled(
true );
2047 mAuxiliaryStorageFieldsGrpBox->setEnabled(
true );
2054 mAuxiliaryStorageFeaturesLineEdit->setText( QLocale().toString( features ) );
2057 mAuxiliaryLayerActionClear->setEnabled(
true );
2058 mAuxiliaryLayerActionDelete->setEnabled(
true );
2059 mAuxiliaryLayerActionExport->setEnabled(
true );
2060 mAuxiliaryLayerActionNew->setEnabled(
false );
2066 mAuxiliaryStorageFieldsLineEdit->setText( QLocale().toString( fields ) );
2069 mAuxiliaryStorageFieldsTree->clear();
2073 QTreeWidgetItem *item =
new QTreeWidgetItem();
2075 item->setText( 0, prop.
origin() );
2076 item->setText( 1, prop.
name() );
2077 item->setText( 2, prop.
comment() );
2081 mAuxiliaryStorageFieldsTree->addTopLevelItem( item );
2087 mAuxiliaryStorageInformationGrpBox->setEnabled(
false );
2088 mAuxiliaryStorageFieldsGrpBox->setEnabled(
false );
2090 mAuxiliaryLayerActionClear->setEnabled(
false );
2091 mAuxiliaryLayerActionDelete->setEnabled(
false );
2092 mAuxiliaryLayerActionExport->setEnabled(
false );
2093 mAuxiliaryLayerActionNew->setEnabled(
true );
2095 mAuxiliaryStorageFieldsTree->clear();
2096 mAuxiliaryStorageKeyLineEdit->setText( QString() );
2097 mAuxiliaryStorageFieldsLineEdit->setText( QString() );
2098 mAuxiliaryStorageFeaturesLineEdit->setText( QString() );
2102void QgsVectorLayerProperties::onAuxiliaryLayerNew()
2110 if ( dlg.exec() == QDialog::Accepted )
2112 updateAuxiliaryStoragePage();
2116void QgsVectorLayerProperties::onAuxiliaryLayerClear()
2123 const QString msg = tr(
"Are you sure you want to clear auxiliary data for %1?" ).arg( mLayer->
name() );
2124 QMessageBox::StandardButton reply;
2125 reply = QMessageBox::question(
this,
"Clear Auxiliary Data", msg, QMessageBox::Yes | QMessageBox::No );
2127 if ( reply == QMessageBox::Yes )
2129 QApplication::setOverrideCursor( Qt::WaitCursor );
2131 QApplication::restoreOverrideCursor();
2132 updateAuxiliaryStoragePage();
2137void QgsVectorLayerProperties::onAuxiliaryLayerDelete()
2143 const QString msg = tr(
"Are you sure you want to delete auxiliary storage for %1?" ).arg( mLayer->
name() );
2144 QMessageBox::StandardButton reply;
2145 reply = QMessageBox::question(
this,
"Delete Auxiliary Storage", msg, QMessageBox::Yes | QMessageBox::No );
2147 if ( reply == QMessageBox::Yes )
2149 QApplication::setOverrideCursor( Qt::WaitCursor );
2162 QApplication::restoreOverrideCursor();
2163 updateAuxiliaryStoragePage();
2168void QgsVectorLayerProperties::onAuxiliaryLayerDeleteField()
2174 QList<QTreeWidgetItem *> items = mAuxiliaryStorageFieldsTree->selectedItems();
2175 if ( items.count() < 1 )
2179 const QTreeWidgetItem *item = items[0];
2182 def.
setName( item->text( 1 ) );
2192 const QString msg = tr(
"Are you sure you want to delete auxiliary field %1 for %2?" ).arg( item->text( 1 ), item->text( 0 ) );
2194 QMessageBox::StandardButton reply;
2195 const QString title = QObject::tr(
"Delete Auxiliary Field" );
2196 reply = QMessageBox::question(
this, title, msg, QMessageBox::Yes | QMessageBox::No );
2198 if ( reply == QMessageBox::Yes )
2200 QApplication::setOverrideCursor( Qt::WaitCursor );
2201 deleteAuxiliaryField( index );
2203 QApplication::restoreOverrideCursor();
2207void QgsVectorLayerProperties::onAuxiliaryLayerAddField()
2214 if ( dlg.exec() == QDialog::Accepted )
2216 updateAuxiliaryStoragePage();
2220void QgsVectorLayerProperties::deleteAuxiliaryField(
int index )
2233 if ( key >= 0 && def.
origin().compare(
"labeling", Qt::CaseInsensitive ) == 0
2240 updateAuxiliaryStoragePage();
2241 mSourceFieldsPropertiesDialog->
init();
2245 const QString title = QObject::tr(
"Delete Auxiliary Field" );
2247 const QString msg = QObject::tr(
"Unable to remove auxiliary field (%1)" ).arg( errors );
2248 mMessageBar->
pushMessage( title, msg, Qgis::MessageLevel::Warning );
@ NoVendorExtension
No vendor extensions.
static QString defaultProjectScales()
A string with default project scales.
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()
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.
static bool isDefault(const QString &styleName)
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
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.
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.
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.
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.
virtual QString saveSldStyleV2(bool &resultFlag, const QgsSldExportContext &exportContext) const
Saves the properties of this layer to an SLD format file.
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...
void setMapTipTemplate(const QString &mapTipTemplate)
The mapTip is a pretty, html representation for feature information.
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...
virtual QString saveDefaultStyle(bool &resultFlag, StyleCategories categories)
Save the properties of this layer as the default style (either as a .qml file on disk or as a record ...
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.
The QgsSldExportContext class holds SLD export options and other information related to SLD export of...
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 addPropertiesPageFactory(const QgsMapLayerConfigWidgetFactory *factory)
Adds a properties page factory to the vector layer properties dialog.
void optionsStackedWidget_CurrentChanged(int index) final
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.
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.
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.
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 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
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...
#define Q_NOWARN_DEPRECATED_POP
#define Q_NOWARN_DEPRECATED_PUSH
const QgsCoordinateReferenceSystem & crs
Setting options for creating vector data providers.
Setting to define QGIS Server WMS Dimension.