Git commit 2525341c42db3fbff8f8bcf1710def852a57f9af by Maik Qualmann. Committed on 30/11/2017 at 22:16. Pushed by mqualmann into branch 'master'. use choice field for make and model in the advanced search M +14 -7 libs/database/coredb/coredb.cpp M +2 -2 libs/database/coredb/coredb.h M +2 -2 libs/database/item/imagequerybuilder.cpp M +11 -6 libs/imageproperties/imagepropertiestab.cpp M +45 -8 utilities/searchwindow/searchfields.cpp https://commits.kde.org/digikam/2525341c42db3fbff8f8bcf1710def852a57f9af diff --git a/libs/database/coredb/coredb.cpp b/libs/database/coredb/coredb.= cpp index 14167b625b..50063c177c 100644 --- a/libs/database/coredb/coredb.cpp +++ b/libs/database/coredb/coredb.cpp @@ -3646,25 +3646,32 @@ QMap CoreDB::getFormatStatistics(Data= baseItem::Category category) return map; } = -QStringList CoreDB::getLensesFromImages() +QStringList CoreDB::getListFromImageMetadata(DatabaseFields::ImageMetadata= field) { + QStringList list; QList values; + QStringList fieldName =3D imageMetadataFieldList(field); = - d->db->execSql(QString::fromUtf8("SELECT DISTINCT lens FROM ImageMetad= ata " - " INNER JOIN Images ON imageid=3DImag= es.id;"), - &values); + if (fieldName.count() !=3D 1) + { + return list; + } + + QString sql =3D QString::fromUtf8("SELECT DISTINCT %1 FROM ImageMetada= ta " + " INNER JOIN Images ON imageid=3DImage= s.id;"); = - QStringList lenses; + sql =3D sql.arg(fieldName.first()); + d->db->execSql(sql, &values); = for (QList::const_iterator it =3D values.constBegin(); it != =3D values.constEnd(); ++it) { if (!it->isNull()) { - lenses << it->toString(); + list << it->toString(); } } = - return lenses; + return list; } = /* diff --git a/libs/database/coredb/coredb.h b/libs/database/coredb/coredb.h index 39ba4699d4..fe2f60f7ee 100644 --- a/libs/database/coredb/coredb.h +++ b/libs/database/coredb/coredb.h @@ -1256,9 +1256,9 @@ public: QMap getFormatStatistics(DatabaseItem::Category category= ); = /** - * Return a list of used lenses from the images + * Return a list from a field from imageMetadata */ - QStringList getLensesFromImages(); + QStringList getListFromImageMetadata(DatabaseFields::ImageMetadata fie= ld); = // ----------- Moving and Copying Items ----------- = diff --git a/libs/database/item/imagequerybuilder.cpp b/libs/database/item/= imagequerybuilder.cpp index cedf78dd95..15f66c4a45 100644 --- a/libs/database/item/imagequerybuilder.cpp +++ b/libs/database/item/imagequerybuilder.cpp @@ -1313,11 +1313,11 @@ bool ImageQueryBuilder::buildField(QString& sql, Se= archXmlCachingReader& reader, } else if (name =3D=3D QLatin1String("make")) { - fieldQuery.addStringField(QLatin1String("ImageMetadata.make")); + fieldQuery.addChoiceStringField(QLatin1String("ImageMetadata.make"= )); } else if (name =3D=3D QLatin1String("model")) { - fieldQuery.addStringField(QLatin1String("ImageMetadata.model")); + fieldQuery.addChoiceStringField(QLatin1String("ImageMetadata.model= ")); } else if (name =3D=3D QLatin1String("lenses")) { diff --git a/libs/imageproperties/imagepropertiestab.cpp b/libs/imageproper= ties/imagepropertiestab.cpp index 727376a1eb..845b369c88 100644 --- a/libs/imageproperties/imagepropertiestab.cpp +++ b/libs/imageproperties/imagepropertiestab.cpp @@ -844,12 +844,15 @@ QStringList ImagePropertiesTab::shortenedTagPaths(con= st QStringList& tagPaths, Q = void ImagePropertiesTab::shortenedMakeInfo(QString& make) { - make.remove(QLatin1String(" CORPORATION"), Qt::CaseInsensitive); = // from Nikon, Pentax, and Olympus - make.remove(QLatin1String("EASTMAN "), Qt::CaseInsensitive); = // from Kodak - make.remove(QLatin1String(" COMPANY"), Qt::CaseInsensitive); = // from Kodak - make.remove(QLatin1String(" OPTICAL CO.,LTD"), Qt::CaseInsensitive); = // from Olympus - make.remove(QLatin1String(" Techwin co.,Ltd."), Qt::CaseInsensitive); = // from Samsung - make.remove(QLatin1String(" Co.,Ltd."), Qt::CaseInsensitive); = // from Minolta + make.remove(QLatin1String(" CORPORATION"), Qt::CaseInsensitive);= // from Nikon, Pentax, and Olympus + make.remove(QLatin1String("EASTMAN "), Qt::CaseInsensitive);= // from Kodak + make.remove(QLatin1String(" COMPANY"), Qt::CaseInsensitive);= // from Kodak + make.remove(QLatin1String(" OPTICAL CO.,LTD"), Qt::CaseInsensitive);= // from Olympus + make.remove(QLatin1String(" IMAGING CORP."), Qt::CaseInsensitive);= // from Olympus + make.remove(QLatin1String(" Techwin co.,Ltd."), Qt::CaseInsensitive);= // from Samsung + make.remove(QLatin1String(" Co.,Ltd."), Qt::CaseInsensitive);= // from Minolta + make.remove(QLatin1String(" Electric Co.,Ltd."), Qt::CaseInsensitive);= // from Sanyo + make.remove(QLatin1String(" Electric Co.,Ltd"), Qt::CaseInsensitive);= // from Sanyo } = void ImagePropertiesTab::shortenedModelInfo(QString& model) @@ -858,6 +861,8 @@ void ImagePropertiesTab::shortenedModelInfo(QString& mo= del) model.remove(QLatin1String("NIKON "), Qt::CaseInsensitive); model.remove(QLatin1String("PENTAX "), Qt::CaseInsensitive); model.remove(QLatin1String(" DIGITAL"), Qt::CaseInsensitive); = // from Canon + model.remove(QLatin1String("KODAK "), Qt::CaseInsensitive); + model.remove(QLatin1String(" CAMERA"), Qt::CaseInsensitive); = // from Kodak } = /** diff --git a/utilities/searchwindow/searchfields.cpp b/utilities/searchwind= ow/searchfields.cpp index 5bf903df06..87ccee060f 100644 --- a/utilities/searchwindow/searchfields.cpp +++ b/utilities/searchwindow/searchfields.cpp @@ -73,6 +73,7 @@ #include "colorlabelfilter.h" #include "picklabelfilter.h" #include "applicationsettings.h" +#include "imagepropertiestab.h" = namespace Digikam { @@ -303,18 +304,54 @@ SearchField* SearchField::createField(const QString& = name, SearchFieldGroup* con } else if (name =3D=3D QLatin1String("make")) { - //string - SearchFieldText* const field =3D new SearchFieldText(parent); + //choice + SearchFieldChoice* const field =3D new SearchFieldChoice(parent); field->setFieldName(name); field->setText(i18n("Camera"), i18n("The make of the camera")); + QStringList make =3D CoreDbAccess().db()->getListFromImageMetadata= (DatabaseFields::Make); + + for (int i =3D 0 ; i < make.count() ; i++) + { + ImagePropertiesTab::shortenedMakeInfo(make[i]); + make[i] =3D make[i].trimmed(); + } + + make.removeDuplicates(); + make +=3D make; + make.sort(); + + for (int i =3D 0 ; i < make.count() ; i +=3D 2) + { + make[i] =3D QLatin1Char('*') + make[i] + QLatin1Char('*'); + } + + field->setChoice(make); return field; } else if (name =3D=3D QLatin1String("model")) { - //string - SearchFieldText* const field =3D new SearchFieldText(parent); + //choice + SearchFieldChoice* const field =3D new SearchFieldChoice(parent); field->setFieldName(name); field->setText(i18n("Camera"), i18n("The model of the camera")); + QStringList model =3D CoreDbAccess().db()->getListFromImageMetadat= a(DatabaseFields::Model); + + for (int i =3D 0 ; i < model.count() ; i++) + { + ImagePropertiesTab::shortenedModelInfo(model[i]); + model[i] =3D model[i].trimmed(); + } + + model.removeDuplicates(); + model +=3D model; + model.sort(); + + for (int i =3D 0 ; i < model.count() ; i +=3D 2) + { + model[i] =3D QLatin1Char('*') + model[i] + QLatin1Char('*'); + } + + field->setChoice(model); return field; } else if (name =3D=3D QLatin1String("lenses")) @@ -323,10 +360,10 @@ SearchField* SearchField::createField(const QString& = name, SearchFieldGroup* con SearchFieldChoice* const field =3D new SearchFieldChoice(parent); field->setFieldName(name); field->setText(i18n("Lens"), i18n("The type of the lens")); - QStringList lenses =3D CoreDbAccess().db()->getLensesFromImages(); - lenses +=3D lenses; - lenses.sort(); - field->setChoice(lenses); + QStringList lens =3D CoreDbAccess().db()->getListFromImageMetadata= (DatabaseFields::Lens); + lens +=3D lens; + lens.sort(); + field->setChoice(lens); return field; } else if (name =3D=3D QLatin1String("aperture"))