[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [digikam] /: use choice field for make and model in the advanced search
From: Maik Qualmann <null () kde ! org>
Date: 2017-11-30 22:17:04
Message-ID: E1eKX8i-0002xs-HJ () code ! kde ! org
[Download RAW message or body]
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<QString, int> \
CoreDB::getFormatStatistics(DatabaseItem::Category category) return map;
}
-QStringList CoreDB::getLensesFromImages()
+QStringList CoreDB::getListFromImageMetadata(DatabaseFields::ImageMetadata field)
{
+ QStringList list;
QList<QVariant> values;
+ QStringList fieldName = imageMetadataFieldList(field);
- d->db->execSql(QString::fromUtf8("SELECT DISTINCT lens FROM ImageMetadata "
- " INNER JOIN Images ON imageid=Images.id;"),
- &values);
+ if (fieldName.count() != 1)
+ {
+ return list;
+ }
+
+ QString sql = QString::fromUtf8("SELECT DISTINCT %1 FROM ImageMetadata "
+ " INNER JOIN Images ON imageid=Images.id;");
- QStringList lenses;
+ sql = sql.arg(fieldName.first());
+ d->db->execSql(sql, &values);
for (QList<QVariant>::const_iterator it = values.constBegin(); it != \
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<QString, int> 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 field);
// ----------- 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, \
SearchXmlCachingReader& reader, }
else if (name == QLatin1String("make"))
{
- fieldQuery.addStringField(QLatin1String("ImageMetadata.make"));
+ fieldQuery.addChoiceStringField(QLatin1String("ImageMetadata.make"));
}
else if (name == QLatin1String("model"))
{
- fieldQuery.addStringField(QLatin1String("ImageMetadata.model"));
+ fieldQuery.addChoiceStringField(QLatin1String("ImageMetadata.model"));
}
else if (name == QLatin1String("lenses"))
{
diff --git a/libs/imageproperties/imagepropertiestab.cpp \
b/libs/imageproperties/imagepropertiestab.cpp index 727376a1eb..845b369c88 100644
--- a/libs/imageproperties/imagepropertiestab.cpp
+++ b/libs/imageproperties/imagepropertiestab.cpp
@@ -844,12 +844,15 @@ QStringList ImagePropertiesTab::shortenedTagPaths(const \
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& model)
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/searchwindow/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 == QLatin1String("make"))
{
- //string
- SearchFieldText* const field = new SearchFieldText(parent);
+ //choice
+ SearchFieldChoice* const field = new SearchFieldChoice(parent);
field->setFieldName(name);
field->setText(i18n("Camera"), i18n("The make of the camera"));
+ QStringList make = \
CoreDbAccess().db()->getListFromImageMetadata(DatabaseFields::Make); +
+ for (int i = 0 ; i < make.count() ; i++)
+ {
+ ImagePropertiesTab::shortenedMakeInfo(make[i]);
+ make[i] = make[i].trimmed();
+ }
+
+ make.removeDuplicates();
+ make += make;
+ make.sort();
+
+ for (int i = 0 ; i < make.count() ; i += 2)
+ {
+ make[i] = QLatin1Char('*') + make[i] + QLatin1Char('*');
+ }
+
+ field->setChoice(make);
return field;
}
else if (name == QLatin1String("model"))
{
- //string
- SearchFieldText* const field = new SearchFieldText(parent);
+ //choice
+ SearchFieldChoice* const field = new SearchFieldChoice(parent);
field->setFieldName(name);
field->setText(i18n("Camera"), i18n("The model of the camera"));
+ QStringList model = \
CoreDbAccess().db()->getListFromImageMetadata(DatabaseFields::Model); +
+ for (int i = 0 ; i < model.count() ; i++)
+ {
+ ImagePropertiesTab::shortenedModelInfo(model[i]);
+ model[i] = model[i].trimmed();
+ }
+
+ model.removeDuplicates();
+ model += model;
+ model.sort();
+
+ for (int i = 0 ; i < model.count() ; i += 2)
+ {
+ model[i] = QLatin1Char('*') + model[i] + QLatin1Char('*');
+ }
+
+ field->setChoice(model);
return field;
}
else if (name == QLatin1String("lenses"))
@@ -323,10 +360,10 @@ SearchField* SearchField::createField(const QString& name, \
SearchFieldGroup* con SearchFieldChoice* const field = new \
SearchFieldChoice(parent); field->setFieldName(name);
field->setText(i18n("Lens"), i18n("The type of the lens"));
- QStringList lenses = CoreDbAccess().db()->getLensesFromImages();
- lenses += lenses;
- lenses.sort();
- field->setChoice(lenses);
+ QStringList lens = \
CoreDbAccess().db()->getListFromImageMetadata(DatabaseFields::Lens); + lens += \
lens; + lens.sort();
+ field->setChoice(lens);
return field;
}
else if (name == QLatin1String("aperture"))
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic