[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