20 #include <QPushButton>
23 #include <QInputDialog>
24 #include <QStringListModel>
40 tabWidget->setCurrentIndex( 0 );
43 encodingFrame->setHidden(
true );
46 mDefaultCategories << tr(
"Farming" ) << tr(
"Climatology Meteorology Atmosphere" ) << tr(
"Location" ) << tr(
"Intelligence Military" ) << tr(
"Transportation" ) << tr(
"Structure" ) << tr(
"Boundaries" );
47 mDefaultCategories << tr(
"Inland Waters" ) << tr(
"Planning Cadastre" ) << tr(
"Geoscientific Information" ) << tr(
"Elevation" ) << tr(
"Health" ) << tr(
"Biota" ) << tr(
"Oceans" ) << tr(
"Environment" );
48 mDefaultCategories << tr(
"Utilities Communication" ) << tr(
"Economy" ) << tr(
"Society" ) << tr(
"Imagery Base Maps Earth Cover" );
49 mDefaultCategoriesModel =
new QStringListModel( mDefaultCategories,
this );
50 mDefaultCategoriesModel->sort( 0 );
51 listDefaultCategories->setModel( mDefaultCategoriesModel );
54 mCategoriesModel =
new QStringListModel( listCategories );
55 listCategories->setModel( mCategoriesModel );
58 mRightsModel =
new QStringListModel( listRights );
59 listRights->setModel( mRightsModel );
62 mConstraintsModel =
new QStandardItemModel( tabConstraints );
63 mConstraintsModel->setColumnCount( 2 );
64 QStringList constraintheaders;
65 constraintheaders << tr(
"Type" ) << tr(
"Constraint" );
66 mConstraintsModel->setHorizontalHeaderLabels( constraintheaders );
67 tabConstraints->setModel( mConstraintsModel );
71 dateTimeFrom->setAllowNull(
true );
72 dateTimeTo->setAllowNull(
true );
75 mLinksModel =
new QStandardItemModel( tabLinks );
76 mLinksModel->setColumnCount( 7 );
77 QStringList headers = QStringList();
78 headers << tr(
"Name" ) << tr(
"Type" ) << tr(
"URL" ) << tr(
"Description" ) << tr(
"Format" ) << tr(
"MIME" ) << tr(
"Size" );
79 mLinksModel->setHorizontalHeaderLabels( headers );
80 tabLinks->setModel( mLinksModel );
84 mHistoryModel =
new QStringListModel( listHistory );
85 listHistory->setModel( mHistoryModel );
88 connect( tabWidget, &QTabWidget::currentChanged,
this, &QgsMetadataWidget::updatePanel );
89 connect( btnAutoSource, &QPushButton::clicked,
this, &QgsMetadataWidget::fillSourceFromLayer );
90 connect( btnAddVocabulary, &QPushButton::clicked,
this, &QgsMetadataWidget::addVocabulary );
91 connect( btnRemoveVocabulary, &QPushButton::clicked,
this, &QgsMetadataWidget::removeSelectedVocabulary );
92 connect( btnAddRight, &QPushButton::clicked,
this, &QgsMetadataWidget::addRight );
93 connect( btnRemoveRight, &QPushButton::clicked,
this, &QgsMetadataWidget::removeSelectedRight );
94 connect( btnAddLicence, &QPushButton::clicked,
this, &QgsMetadataWidget::addLicence );
95 connect( btnRemoveLicence, &QPushButton::clicked,
this, &QgsMetadataWidget::removeSelectedLicence );
96 connect( btnAddConstraint, &QPushButton::clicked,
this, &QgsMetadataWidget::addConstraint );
97 connect( btnRemoveConstraint, &QPushButton::clicked,
this, &QgsMetadataWidget::removeSelectedConstraint );
98 connect( btnSetCrsFromLayer, &QPushButton::clicked,
this, &QgsMetadataWidget::fillCrsFromLayer );
99 connect( btnSetCrsFromProvider, &QPushButton::clicked,
this, &QgsMetadataWidget::fillCrsFromProvider );
100 connect( btnAddAddress, &QPushButton::clicked,
this, &QgsMetadataWidget::addAddress );
101 connect( btnRemoveAddress, &QPushButton::clicked,
this, &QgsMetadataWidget::removeSelectedAddress );
102 connect( btnAddLink, &QPushButton::clicked,
this, &QgsMetadataWidget::addLink );
103 connect( btnRemoveLink, &QPushButton::clicked,
this, &QgsMetadataWidget::removeSelectedLink );
104 connect( btnAddHistory, &QPushButton::clicked,
this, &QgsMetadataWidget::addHistory );
105 connect( btnRemoveHistory, &QPushButton::clicked,
this, &QgsMetadataWidget::removeSelectedHistory );
106 connect( btnNewCategory, &QPushButton::clicked,
this, &QgsMetadataWidget::addNewCategory );
107 connect( btnAddDefaultCategory, &QPushButton::clicked,
this, &QgsMetadataWidget::addDefaultCategories );
108 connect( btnRemoveCategory, &QPushButton::clicked,
this, &QgsMetadataWidget::removeSelectedCategories );
113 btnAutoSource->setEnabled(
false );
114 btnAutoEncoding->setEnabled(
false );
115 btnSetCrsFromLayer->setEnabled(
false );
136 type = tr(
"dataset" );
137 typeUpper = tr(
"Dataset" );
138 mEncodingFrame->show();
139 mAuthorFrame->hide();
140 btnAutoSource->setEnabled( mLayer );
144 type = tr(
"project" );
145 typeUpper = tr(
"Project" );
146 mEncodingFrame->hide();
147 mAuthorFrame->show();
148 tabWidget->removeTab( 4 );
149 tabWidget->removeTab( 3 );
150 btnAutoSource->setEnabled(
true );
154 mIdLabel->setText( tr(
"This page describes the basic attribution of the %1. Please use the tooltips for more information." ).arg( type ) );
155 mLabelCategories->setText( tr(
"%1 categories." ).arg( typeUpper ) );
156 mLabelContact->setText( tr(
"Contacts related to the %1." ).arg( type ) );
157 mLabelLinks->setText( tr(
"Links describe ancillary resources and information related to this %1." ).arg( type ) );
158 mLabelHistory->setText( tr(
"History about the %1." ).arg( type ) );
159 labelKeywords->setText( tr(
"<html><head/><body><p>Keywords are optional, and provide a way to provide additional descriptive information about "
160 "the %1. Edits made in the categories tab will update the category entry below. For the concept, we suggest "
161 "to use a standard based vocabulary such as <a href=\"https://www.eionet.europa.eu/gemet/en/inspire-themes/\">"
162 "<span style=\" text-decoration: underline; color:#0000ff;\">GEMET.</span></a></p></body></html>" ).arg( type ) );
163 btnAutoSource->setText( tr(
"Set from %1" ).arg( mMode ==
LayerMetadata ? tr(
"layer" ) : tr(
"project" ) ) );
182 std::unique_ptr< QgsAbstractMetadataBase > md;
186 md = qgis::make_unique< QgsLayerMetadata >();
190 md = qgis::make_unique< QgsProjectMetadata >();
198 void QgsMetadataWidget::fillSourceFromLayer()
216 void QgsMetadataWidget::addVocabulary()
218 int row = tabKeywords->rowCount();
219 tabKeywords->setRowCount( row + 1 );
220 QTableWidgetItem *pCell =
nullptr;
223 pCell =
new QTableWidgetItem( QString( tr(
"undefined %1" ) ).arg( row + 1 ) );
224 tabKeywords->setItem( row, 0, pCell );
227 pCell =
new QTableWidgetItem();
228 tabKeywords->setItem( row, 1, pCell );
231 void QgsMetadataWidget::removeSelectedVocabulary()
233 QItemSelectionModel *selectionModel = tabKeywords->selectionModel();
234 const QModelIndexList selectedRows = selectionModel->selectedRows();
235 for (
int i = 0; i < selectedRows.size() ; i++ )
237 tabKeywords->model()->removeRow( selectedRows[i].row() );
241 void QgsMetadataWidget::addLicence()
243 QString newLicence = QInputDialog::getItem(
this, tr(
"New Licence" ), tr(
"New Licence" ),
parseLicenses(), 0,
true );
244 if ( tabLicenses->findItems( newLicence, Qt::MatchExactly ).isEmpty() )
246 int row = tabLicenses->rowCount();
247 tabLicenses->setRowCount( row + 1 );
248 QTableWidgetItem *pCell =
new QTableWidgetItem( newLicence );
249 tabLicenses->setItem( row, 0, pCell );
253 void QgsMetadataWidget::removeSelectedLicence()
255 QItemSelectionModel *selectionModel = tabLicenses->selectionModel();
256 const QModelIndexList selectedRows = selectionModel->selectedRows();
257 for (
int i = 0; i < selectedRows.size() ; i++ )
259 tabLicenses->model()->removeRow( selectedRows[i].row() );
263 void QgsMetadataWidget::addRight()
265 QString newRight = QInputDialog::getText(
this, tr(
"New Right" ), tr(
"New Right" ) );
266 QStringList existingRights = mRightsModel->stringList();
267 if ( ! existingRights.contains( newRight ) )
269 existingRights.append( newRight );
270 mRightsModel->setStringList( existingRights );
274 void QgsMetadataWidget::removeSelectedRight()
276 QItemSelectionModel *selection = listRights->selectionModel();
277 if ( selection->hasSelection() )
279 QModelIndex indexElementSelectionne = selection->currentIndex();
281 QVariant item = mRightsModel->data( indexElementSelectionne, Qt::DisplayRole );
282 QStringList list = mRightsModel->stringList();
283 list.removeOne( item.toString() );
284 mRightsModel->setStringList( list );
288 void QgsMetadataWidget::addConstraint()
290 int row = mConstraintsModel->rowCount();
291 mConstraintsModel->setItem( row, 0,
new QStandardItem( QString( tr(
"undefined %1" ) ).arg( row + 1 ) ) );
292 mConstraintsModel->setItem( row, 1,
new QStandardItem( QString( tr(
"undefined %1" ) ).arg( row + 1 ) ) );
295 void QgsMetadataWidget::removeSelectedConstraint()
297 const QModelIndexList selectedRows = tabConstraints->selectionModel()->selectedRows();
298 if ( selectedRows.empty() )
300 mConstraintsModel->removeRow( selectedRows[0].row() );
305 if ( ( mCrs.
isValid() ) && ( mLayer ) )
308 spatialExtentSelector->setEnabled(
true );
309 spatialExtentSelector->setOutputCrs( mCrs );
313 lblCurrentCrsStatus->setText( tr(
"Same as layer properties and provider." ) );
317 lblCurrentCrsStatus->setText( tr(
"Same as layer properties but different than the provider." ) );
321 lblCurrentCrsStatus->setText( tr(
"Same as the provider but different than the layer properties." ) );
325 lblCurrentCrsStatus->setText( tr(
"Does not match either layer properties or the provider." ) );
330 lblCurrentCrs->setText( tr(
"CRS: Not set." ) );
331 lblCurrentCrsStatus->setText( QString() );
332 spatialExtentSelector->setEnabled(
false );
336 void QgsMetadataWidget::addAddress()
338 int row = tabAddresses->rowCount();
339 tabAddresses->setRowCount( row + 1 );
340 QTableWidgetItem *pCell =
nullptr;
343 pCell =
new QTableWidgetItem( QString( tr(
"postal" ) ) );
344 tabAddresses->setItem( row, 0, pCell );
347 tabAddresses->setItem( row, 1,
new QTableWidgetItem() );
350 tabAddresses->setItem( row, 2,
new QTableWidgetItem() );
353 tabAddresses->setItem( row, 3,
new QTableWidgetItem() );
356 tabAddresses->setItem( row, 4,
new QTableWidgetItem() );
359 tabAddresses->setItem( row, 5,
new QTableWidgetItem() );
362 void QgsMetadataWidget::removeSelectedAddress()
364 QItemSelectionModel *selectionModel = tabAddresses->selectionModel();
365 const QModelIndexList selectedRows = selectionModel->selectedRows();
366 for (
int i = 0; i < selectedRows.size() ; i++ )
368 tabAddresses->model()->removeRow( selectedRows[i].row() );
372 void QgsMetadataWidget::fillCrsFromLayer()
374 mCrs = mLayer->
crs();
378 void QgsMetadataWidget::fillCrsFromProvider()
384 void QgsMetadataWidget::addLink()
386 int row = mLinksModel->rowCount();
387 mLinksModel->setItem( row, 0,
new QStandardItem( QString( tr(
"undefined %1" ) ).arg( row + 1 ) ) );
388 mLinksModel->setItem( row, 1,
new QStandardItem() );
389 mLinksModel->setItem( row, 2,
new QStandardItem() );
390 mLinksModel->setItem( row, 3,
new QStandardItem() );
391 mLinksModel->setItem( row, 4,
new QStandardItem() );
392 mLinksModel->setItem( row, 5,
new QStandardItem() );
393 mLinksModel->setItem( row, 6,
new QStandardItem() );
396 void QgsMetadataWidget::removeSelectedLink()
398 const QModelIndexList selectedRows = tabLinks->selectionModel()->selectedRows();
399 if ( selectedRows.empty() )
402 mLinksModel->removeRow( selectedRows[0].row() );
405 void QgsMetadataWidget::addHistory()
407 QString newHistory = QInputDialog::getText(
this, tr(
"New History" ), tr(
"New History" ) );
408 QStringList existingHistory = mHistoryModel->stringList();
409 if ( ! existingHistory.contains( newHistory ) )
411 existingHistory.append( newHistory );
412 mHistoryModel->setStringList( existingHistory );
416 void QgsMetadataWidget::removeSelectedHistory()
418 QItemSelectionModel *selection = listHistory->selectionModel();
419 if ( selection->hasSelection() )
421 QModelIndex indexElementSelectionne = selection->currentIndex();
423 QVariant item = mHistoryModel->data( indexElementSelectionne, Qt::DisplayRole );
424 QStringList list = mHistoryModel->stringList();
425 list.removeOne( item.toString() );
426 mHistoryModel->setStringList( list );
430 void QgsMetadataWidget::fillComboBox()
435 comboType->setEditable(
true );
438 const QStringList &keys = types.keys();
440 for (
const QString &type : keys )
442 comboType->insertItem( i, type );
443 comboType->setItemData( i, types.value( type ), Qt::ToolTipRole );
449 comboLanguage->setEditable(
true );
450 comboLanguage->clear();
452 const QStringList &k = countries.keys();
454 for (
const QString &countryCode : k )
456 comboLanguage->insertItem( i, countryCode );
457 comboLanguage->setItemData( i, countries.value( countryCode ), Qt::ToolTipRole );
462 void QgsMetadataWidget::setUiFromMetadata()
465 lineEditParentId->setText( mMetadata->parentIdentifier() );
468 if ( ! mMetadata->identifier().isEmpty() )
470 lineEditIdentifier->setText( mMetadata->identifier() );
474 if ( ! mMetadata->title().isEmpty() )
476 whileBlocking( lineEditTitle )->setText( mMetadata->title() );
480 if ( ! mMetadata->type().isEmpty() )
482 if ( comboType->findText( mMetadata->type() ) == -1 )
484 comboType->addItem( mMetadata->type() );
486 comboType->setCurrentIndex( comboType->findText( mMetadata->type() ) );
490 if ( ! mMetadata->language().isEmpty() )
492 if ( comboLanguage->findText( mMetadata->language() ) == -1 )
494 comboLanguage->addItem( mMetadata->language() );
496 comboLanguage->setCurrentIndex( comboLanguage->findText( mMetadata->language() ) );
500 textEditAbstract->setPlainText( mMetadata->abstract() );
503 mCategoriesModel->setStringList( mMetadata->categories() );
506 tabKeywords->setRowCount( 0 );
507 QMapIterator<QString, QStringList> i( mMetadata->keywords() );
508 while ( i.hasNext() )
512 int currentRow = tabKeywords->rowCount() - 1;
513 tabKeywords->item( currentRow, 0 )->setText( i.key() );
514 tabKeywords->item( currentRow, 1 )->setText( i.value().join( QStringLiteral(
"," ) ) );
520 comboEncoding->setCurrentText( layerMetadata->encoding() );
523 lineEditFees->setText( layerMetadata->fees() );
526 tabLicenses->setRowCount( 0 );
527 const QStringList &licenses = layerMetadata->licenses();
528 for (
const QString &licence : licenses )
530 int currentRow = tabLicenses->rowCount();
531 tabLicenses->setRowCount( currentRow + 1 );
532 QTableWidgetItem *pCell = tabLicenses->item( currentRow, 0 );
535 pCell =
new QTableWidgetItem;
536 tabLicenses->setItem( currentRow, 0, pCell );
538 pCell->setText( licence );
542 mRightsModel->setStringList( layerMetadata->rights() );
545 const QList<QgsLayerMetadata::Constraint> &constraints = layerMetadata->constraints();
548 int row = mConstraintsModel->rowCount();
549 mConstraintsModel->setItem( row, 0,
new QStandardItem( constraint.type ) );
550 mConstraintsModel->setItem( row, 1,
new QStandardItem( constraint.constraint ) );
554 mCrs = layerMetadata->crs();
558 const QList<QgsLayerMetadata::SpatialExtent> &spatialExtents = layerMetadata->extent().spatialExtents();
559 if ( ! spatialExtents.isEmpty() )
562 spatialExtentSelector->setOutputCrs( spatialExtents.at( 0 ).extentCrs );
563 spatialExtentSelector->setOriginalExtent( spatialExtents.at( 0 ).bounds.toRectangle(), spatialExtents.at( 0 ).extentCrs );
564 spatialExtentSelector->setOutputExtentFromOriginal();
565 spinBoxZMaximum->setValue( spatialExtents.at( 0 ).bounds.zMaximum() );
566 spinBoxZMinimum->setValue( spatialExtents.at( 0 ).bounds.zMinimum() );
570 const QList<QgsDateTimeRange> &temporalExtents = layerMetadata->extent().temporalExtents();
571 if ( ! temporalExtents.isEmpty() )
574 dateTimeFrom->setDateTime( temporalExtents.at( 0 ).begin() );
575 dateTimeTo->setDateTime( temporalExtents.at( 0 ).end() );
579 dateTimeFrom->clear();
585 mLineEditAuthor->setText( projectMetadata->author() );
586 mCreationDateTimeEdit->setDateTime( projectMetadata->creationDateTime() );
590 const QList<QgsAbstractMetadataBase::Contact> &contacts = mMetadata->contacts();
591 if ( ! contacts.isEmpty() )
595 lineEditContactName->setText( contact.
name );
596 lineEditContactEmail->setText( contact.
email );
597 lineEditContactFax->setText( contact.
fax );
598 lineEditContactOrganization->setText( contact.
organization );
599 lineEditContactPosition->setText( contact.
position );
600 lineEditContactVoice->setText( contact.
voice );
601 if ( comboContactRole->findText( contact.
role ) == -1 )
603 comboContactRole->addItem( contact.
role );
605 comboContactRole->setCurrentIndex( comboContactRole->findText( contact.
role ) );
606 tabAddresses->setRowCount( 0 );
607 const QList<QgsAbstractMetadataBase::Address> &addresses = contact.
addresses;
610 int currentRow = tabAddresses->rowCount();
611 tabAddresses->setRowCount( currentRow + 1 );
612 tabAddresses->setItem( currentRow, 0,
new QTableWidgetItem( address.type ) );
613 tabAddresses->setItem( currentRow, 1,
new QTableWidgetItem( address.address ) );
614 tabAddresses->setItem( currentRow, 2,
new QTableWidgetItem( address.postalCode ) );
615 tabAddresses->setItem( currentRow, 3,
new QTableWidgetItem( address.city ) );
616 tabAddresses->setItem( currentRow, 4,
new QTableWidgetItem( address.administrativeArea ) );
617 tabAddresses->setItem( currentRow, 5,
new QTableWidgetItem( address.country ) );
622 const QList<QgsAbstractMetadataBase::Link> &links = mMetadata->links();
623 mLinksModel->setRowCount( 0 );
626 int row = mLinksModel->rowCount();
627 mLinksModel->setItem( row, 0,
new QStandardItem( link.name ) );
628 mLinksModel->setItem( row, 1,
new QStandardItem( link.type ) );
629 mLinksModel->setItem( row, 2,
new QStandardItem( link.url ) );
630 mLinksModel->setItem( row, 3,
new QStandardItem( link.description ) );
631 mLinksModel->setItem( row, 4,
new QStandardItem( link.format ) );
632 mLinksModel->setItem( row, 5,
new QStandardItem( link.mimeType ) );
633 mLinksModel->setItem( row, 6,
new QStandardItem( link.size ) );
637 mHistoryModel->setStringList( mMetadata->history() );
653 syncFromCategoriesTabToKeywordsTab();
654 QMap<QString, QStringList> keywords;
655 for (
int i = 0; i < tabKeywords->rowCount() ; i++ )
657 keywords.insert( tabKeywords->item( i, 0 )->text(), tabKeywords->item( i, 1 )->text().split(
',' ) );
667 layerMetadata->
setFees( lineEditFees->text() );
670 QStringList licenses;
671 for (
int i = 0; i < tabLicenses->rowCount() ; i++ )
673 licenses.append( tabLicenses->item( i, 0 )->text() );
678 layerMetadata->
setRights( mRightsModel->stringList() );
681 layerMetadata->
setEncoding( comboEncoding->currentText() );
684 QList<QgsLayerMetadata::Constraint> constraints;
685 for (
int row = 0; row < mConstraintsModel->rowCount() ; row++ )
688 constraint.
type = mConstraintsModel->item( row, 0 )->text();
689 constraint.
constraint = mConstraintsModel->item( row, 1 )->text();
690 constraints.append( constraint );
697 layerMetadata->
setCrs( mCrs );
702 spatialExtent.
bounds =
QgsBox3d( spatialExtentSelector->outputExtent() );
705 spatialExtent.
extentCrs = spatialExtentSelector->outputCrs();
706 QList<QgsLayerMetadata::SpatialExtent> spatialExtents;
707 spatialExtents.append( spatialExtent );
708 QList<QgsDateTimeRange> temporalExtents;
709 temporalExtents.append( QgsDateTimeRange( dateTimeFrom->dateTime(), dateTimeTo->dateTime() ) );
720 projectMetadata->
setAuthor( mLineEditAuthor->text() );
728 QList<QgsAbstractMetadataBase::Contact> contacts = mMetadata->contacts();
729 if ( contacts.size() > 0 )
730 contacts.removeFirst();
732 contact.
email = lineEditContactEmail->text();
733 contact.
position = lineEditContactPosition->text();
734 contact.
fax = lineEditContactFax->text();
735 contact.
voice = lineEditContactVoice->text();
736 contact.
name = lineEditContactName->text();
737 contact.
organization = lineEditContactOrganization->text();
738 contact.
role = comboContactRole->currentText();
739 QList<QgsAbstractMetadataBase::Address> addresses;
740 for (
int i = 0; i < tabAddresses->rowCount() ; i++ )
743 address.
type = tabAddresses->item( i, 0 )->text();
744 address.
address = tabAddresses->item( i, 1 )->text();
745 address.
postalCode = tabAddresses->item( i, 2 )->text();
746 address.
city = tabAddresses->item( i, 3 )->text();
748 address.
country = tabAddresses->item( i, 5 )->text();
749 addresses.append( address );
752 contacts.insert( 0, contact );
756 QList<QgsAbstractMetadataBase::Link> links;
757 for (
int row = 0; row < mLinksModel->rowCount() ; row++ )
760 link.
name = mLinksModel->item( row, 0 )->text();
761 link.
type = mLinksModel->item( row, 1 )->text();
762 link.
url = mLinksModel->item( row, 2 )->text();
763 link.
description = mLinksModel->item( row, 3 )->text();
764 link.
format = mLinksModel->item( row, 4 )->text();
765 link.
mimeType = mLinksModel->item( row, 5 )->text();
766 link.
size = mLinksModel->item( row, 6 )->text();
767 links.append( link );
777 std::unique_ptr< QgsAbstractMetadataBase > md(
metadata() );
779 std::unique_ptr< QgsNativeMetadataBaseValidator > validator;
783 validator = qgis::make_unique< QgsNativeMetadataValidator>();
787 validator = qgis::make_unique< QgsNativeProjectMetadataValidator>();
791 QList<QgsAbstractMetadataBaseValidator::ValidationResult> validationResults;
792 bool results = validator->validate( md.get(), validationResults );
799 errors += QLatin1String(
"<b>" ) % result.section;
800 if ( ! result._identifier().isNull() )
802 errors += QLatin1String(
" " ) % QVariant( result._identifier().toInt() + 1 ).toString();
804 errors += QLatin1String(
"</b>: " ) % result.note % QLatin1String(
"<br />" );
809 errors = QString( tr(
"Ok, it seems valid according to the QGIS Schema." ) );
813 myStyle.append( QStringLiteral(
"body { margin: 10px; }\n " ) );
814 resultsCheckMetadata->clear();
815 resultsCheckMetadata->document()->setDefaultStyleSheet( myStyle );
816 resultsCheckMetadata->setHtml( errors );
823 QMap<QString, QString> countries;
824 countries.insert( QString(), QString() );
828 if ( !file.open( QIODevice::ReadOnly ) )
830 QgsDebugMsg( QStringLiteral(
"Error while opening the CSV file: %1, %2 " ).arg( path, file.errorString() ) );
836 while ( !file.atEnd() )
838 QByteArray line = file.readLine();
839 QList<QByteArray> items = line.split(
',' );
840 countries.insert( QString( items.at( 0 ).constData() ).trimmed(), QString( items.at( 1 ).constData() ).trimmed() );
845 QFile secondFile( path );
846 if ( !secondFile.open( QIODevice::ReadOnly ) )
848 QgsDebugMsg( QStringLiteral(
"Error while opening the CSV file: %1, %2 " ).arg( path, file.errorString() ) );
853 secondFile.readLine();
854 while ( !secondFile.atEnd() )
856 QByteArray line = secondFile.readLine();
857 QList<QByteArray> items = line.split(
',' );
858 countries.insert( QString( items.at( 2 ).constData() ).trimmed(), QString( items.at( 0 ).constData() ).trimmed() );
866 QStringList wordList;
867 wordList.append( QString() );
871 if ( !file.open( QIODevice::ReadOnly ) )
873 QgsDebugMsg( QStringLiteral(
"Error while opening the CSV file: %1, %2 " ).arg( path, file.errorString() ) );
879 while ( !file.atEnd() )
881 QByteArray line = file.readLine();
882 wordList.append( line.split(
',' ).at( 0 ).trimmed() );
890 QStringList wordList;
891 wordList.append( QString() );
895 if ( !file.open( QIODevice::ReadOnly ) )
897 QgsDebugMsg( QStringLiteral(
"Error while opening the CSV file: %1, %2 " ).arg( path, file.errorString() ) );
903 while ( !file.atEnd() )
905 QByteArray line = file.readLine();
906 wordList.append( line.split(
',' ).at( 0 ).trimmed() );
914 QStringList wordList;
915 wordList.append( QString() );
919 if ( !file.open( QIODevice::ReadOnly ) )
921 QgsDebugMsg( QStringLiteral(
"Error while opening the CSV file: %1, %2 " ).arg( path, file.errorString() ) );
925 while ( !file.atEnd() )
927 QByteArray line = file.readLine();
928 wordList.append( line.split(
',' ).at( 0 ).trimmed() );
936 QMap<QString, QString> types;
937 types.insert( QString(), QString() );
940 if ( !file.open( QIODevice::ReadOnly ) )
942 QgsDebugMsg( QStringLiteral(
"Error while opening the CSV file: %1, %2 " ).arg( path, file.errorString() ) );
946 types.insert( QString(), QString() );
947 while ( !file.atEnd() )
949 QByteArray line = file.readLine();
950 QList<QByteArray> items = line.split(
';' );
951 types.insert( items.at( 0 ).constData(), items.at( 1 ).constData() );
965 return lineEditTitle->text();
970 if (
title != lineEditTitle->text() )
996 void QgsMetadataWidget::syncFromCategoriesTabToKeywordsTab()
998 if ( mCategoriesModel->rowCount() > 0 )
1000 QList<QTableWidgetItem *> categories = tabKeywords->findItems( QStringLiteral(
"gmd:topicCategory" ), Qt::MatchExactly );
1002 if ( !categories.isEmpty() )
1004 row = categories.at( 0 )->row();
1010 row = tabKeywords->rowCount() - 1;
1011 tabKeywords->item( row, 0 )->setText( QStringLiteral(
"gmd:topicCategory" ) );
1013 tabKeywords->item( row, 1 )->setText( mCategoriesModel->stringList().join( QStringLiteral(
"," ) ) );
1017 void QgsMetadataWidget::updatePanel()
1019 int index = tabWidget->currentIndex();
1020 QString currentTabText = tabWidget->widget( index )->objectName();
1021 if ( currentTabText == QStringLiteral(
"tabCategoriesDialog" ) )
1025 QList<QTableWidgetItem *> categories = tabKeywords->findItems( QStringLiteral(
"gmd:topicCategory" ), Qt::MatchExactly );
1026 if ( !categories.isEmpty() )
1028 int row = categories.at( 0 )->row();
1029 mCategoriesModel->setStringList( tabKeywords->item( row, 1 )->text().split(
',' ) );
1033 mCategoriesModel->setStringList( QStringList() );
1036 else if ( currentTabText == QStringLiteral(
"tabKeywordsDialog" ) )
1040 syncFromCategoriesTabToKeywordsTab();
1042 else if ( currentTabText == QStringLiteral(
"tabValidationDialog" ) )
1048 void QgsMetadataWidget::addNewCategory()
1051 QString text = QInputDialog::getText(
this, tr(
"New Category" ),
1052 tr(
"New Category:" ), QLineEdit::Normal,
1054 if ( ok && !text.isEmpty() )
1056 QStringList list = mCategoriesModel->stringList();
1057 if ( ! list.contains( text ) )
1059 list.append( text );
1060 mCategoriesModel->setStringList( list );
1061 mCategoriesModel->sort( 0 );
1066 void QgsMetadataWidget::addDefaultCategories()
1068 const QModelIndexList selectedIndexes = listDefaultCategories->selectionModel()->selectedIndexes();
1069 QStringList defaultCategoriesList = mDefaultCategoriesModel->stringList();
1070 QStringList selectedCategories = mCategoriesModel->stringList();
1072 for (
const QModelIndex &selection : selectedIndexes )
1074 QVariant item = mDefaultCategoriesModel->data( selection, Qt::DisplayRole );
1075 defaultCategoriesList.removeOne( item.toString() );
1077 selectedCategories.append( item.toString() );
1080 mDefaultCategoriesModel->setStringList( defaultCategoriesList );
1081 mCategoriesModel->setStringList( selectedCategories );
1082 mCategoriesModel->sort( 0 );
1085 void QgsMetadataWidget::removeSelectedCategories()
1087 const QModelIndexList selectedIndexes = listCategories->selectionModel()->selectedIndexes();
1088 QStringList categories = mCategoriesModel->stringList();
1089 QStringList defaultList = mDefaultCategoriesModel->stringList();
1091 for (
const QModelIndex &selection : selectedIndexes )
1093 QVariant item = mCategoriesModel->data( selection, Qt::DisplayRole );
1094 categories.removeOne( item.toString() );
1096 if ( mDefaultCategories.contains( item.toString() ) )
1098 defaultList.append( item.toString() );
1101 mCategoriesModel->setStringList( categories );
1103 mDefaultCategoriesModel->setStringList( defaultList );
1104 mDefaultCategoriesModel->sort( 0 );
1108 : QStyledItemDelegate( parent )
1115 if ( index.column() == 1 )
1118 QComboBox *typeEditor =
new QComboBox( parent );
1119 typeEditor->setEditable(
true );
1120 QStringListModel *model =
new QStringListModel( parent );
1122 typeEditor->setModel( model );
1125 else if ( index.column() == 5 )
1128 QComboBox *mimeEditor =
new QComboBox( parent );
1129 mimeEditor->setEditable(
true );
1130 QStringListModel *model =
new QStringListModel( parent );
1132 mimeEditor->setModel( model );
1136 return QStyledItemDelegate::createEditor( parent, option, index );
1140 : QStyledItemDelegate( parent )
1147 if ( index.column() == 0 )
1150 QComboBox *typeEditor =
new QComboBox( parent );
1151 typeEditor->setEditable(
true );
1153 types << QStringLiteral(
"access" ) << QStringLiteral(
"use" ) << QStringLiteral(
"other" );
1154 QStringListModel *model =
new QStringListModel( parent );
1155 model->setStringList( types );
1156 typeEditor->setModel( model );
1160 return QStyledItemDelegate::createEditor( parent, option, index );