]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/search/searchcriterionselector.cpp
removed unused member variable (the dependency to DolphinMainWindow has been removed...
[dolphin.git] / src / search / searchcriterionselector.cpp
index 34756cc30757b184c5507453cdc75391ab861a48..b620080292969a5ddfc80d5e9870a0054f53914e 100644 (file)
 
 #include "searchcriterionselector.h"
 
+#define DISABLE_NEPOMUK_LEGACY
+#include <nepomuk/comparisonterm.h>
+#include <nepomuk/literalterm.h>
+#include <nepomuk/query.h>
+
+#include "nie.h"
 #include "searchcriterionvalue.h"
 
+#include <Soprano/LiteralValue>
+#include <Soprano/Vocabulary/NAO>
+
 #include <QComboBox>
 #include <QHBoxLayout>
 #include <QList>
@@ -53,15 +62,16 @@ SearchCriterionSelector::SearchCriterionSelector(Type type, QWidget* parent) :
 
     m_removeButton = new QPushButton(this);
     m_removeButton->setIcon(KIcon("list-remove"));
+    m_removeButton->setToolTip(i18nc("@info", "Remove search option"));
     m_removeButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
     connect(m_removeButton, SIGNAL(clicked()), this, SIGNAL(removeCriterion()));
 
     m_layout = new QHBoxLayout(this);
     m_layout->setMargin(0);
+    m_layout->addWidget(m_removeButton);
     m_layout->addWidget(m_descriptionsBox);
     m_layout->addWidget(m_comparatorBox);
     m_layout->addWidget(filler);
-    m_layout->addWidget(m_removeButton);
 
     setLayout(m_layout);
 
@@ -73,10 +83,10 @@ SearchCriterionSelector::~SearchCriterionSelector()
 {
 }
 
-QString SearchCriterionSelector::queryString() const
+Nepomuk::Query::Term SearchCriterionSelector::queryTerm() const
 {
     if (m_valueWidget == 0) {
-        return QString();
+        return Nepomuk::Query::Term();
     }
 
     const int descIndex = m_descriptionsBox->currentIndex();
@@ -84,9 +94,19 @@ QString SearchCriterionSelector::queryString() const
 
     const int compIndex = m_comparatorBox->currentIndex();
     const SearchCriterionDescription::Comparator& comp = descr.comparators()[compIndex];
+    if (!comp.isActive) {
+        return Nepomuk::Query::Term();
+    }
 
-    return comp.prefix + descr.identifier() + comp.operation +
-           '"' + m_valueWidget->value() + '"';
+    const Nepomuk::Query::ComparisonTerm term(descr.identifier(),
+                                              m_valueWidget->value(),
+                                              comp.value);
+    return term;
+}
+
+SearchCriterionSelector::Type SearchCriterionSelector::type() const
+{
+    return static_cast<Type>(m_descriptionsBox->currentIndex());
 }
 
 void SearchCriterionSelector::slotDescriptionChanged(int index)
@@ -110,7 +130,7 @@ void SearchCriterionSelector::slotDescriptionChanged(int index)
 
     // add value widget
     m_valueWidget = description.valueWidget();
-    m_layout->insertWidget(2, m_valueWidget);
+    m_layout->insertWidget(3, m_valueWidget);
 
     m_comparatorBox->setCurrentIndex(0);
     slotComparatorChanged(0);
@@ -125,7 +145,11 @@ void SearchCriterionSelector::slotComparatorChanged(int index)
     const int descIndex = m_descriptionsBox->currentIndex();
     const SearchCriterionDescription& descr = m_descriptions[descIndex];
     const SearchCriterionDescription::Comparator& comp = descr.comparators()[index];
-    m_valueWidget->setVisible(!comp.operation.isEmpty());
+
+    m_valueWidget->initializeValue(comp.autoValueType);
+    // only show the value widget, if an operation is defined
+    // and no automatic calculation is provided
+    m_valueWidget->setVisible(comp.isActive && comp.autoValueType.isEmpty());
 
     emit criterionChanged();
 }
@@ -138,17 +162,18 @@ void SearchCriterionSelector::createDescriptions()
     // TODO: maybe this creation should be forwarded to a factory if
     // the number of items increases in future
     QList<SearchCriterionDescription::Comparator> defaultComps;
-    defaultComps.append(SearchCriterionDescription::Comparator(i18nc("@label", "Greater Than"), ">", "+"));
-    defaultComps.append(SearchCriterionDescription::Comparator(i18nc("@label", "Greater Than or Equal to"), ">=", "+"));
-    defaultComps.append(SearchCriterionDescription::Comparator(i18nc("@label", "Less Than"), "<", "+"));
-    defaultComps.append(SearchCriterionDescription::Comparator(i18nc("@label", "Less Than or Equal to"), "<=", "+"));
+    defaultComps.append(SearchCriterionDescription::Comparator(i18nc("@label", "Greater Than"), Nepomuk::Query::ComparisonTerm::Greater));
+    defaultComps.append(SearchCriterionDescription::Comparator(i18nc("@label", "Greater Than or Equal to"), Nepomuk::Query::ComparisonTerm::GreaterOrEqual));
+    defaultComps.append(SearchCriterionDescription::Comparator(i18nc("@label", "Less Than"), Nepomuk::Query::ComparisonTerm::Smaller));
+    defaultComps.append(SearchCriterionDescription::Comparator(i18nc("@label", "Less Than or Equal to"), Nepomuk::Query::ComparisonTerm::SmallerOrEqual));
 
     // add "Date" description
     QList<SearchCriterionDescription::Comparator> dateComps;
-    dateComps.append(SearchCriterionDescription::Comparator(i18nc("@label", "Anytime"))); // TODO
-    dateComps.append(SearchCriterionDescription::Comparator(i18nc("@label", "Today"))); // TODO
-    dateComps.append(SearchCriterionDescription::Comparator(i18nc("@label", "This week"))); // TODO
-    dateComps.append(SearchCriterionDescription::Comparator(i18nc("@label", "This month"))); // TODO
+    dateComps.append(SearchCriterionDescription::Comparator(i18nc("@label", "Anytime")));
+    dateComps.append(SearchCriterionDescription::Comparator(i18nc("@label", "Today"), Nepomuk::Query::ComparisonTerm::GreaterOrEqual, "today"));
+    dateComps.append(SearchCriterionDescription::Comparator(i18nc("@label", "This Week"), Nepomuk::Query::ComparisonTerm::GreaterOrEqual, "thisWeek"));
+    dateComps.append(SearchCriterionDescription::Comparator(i18nc("@label", "This Month"), Nepomuk::Query::ComparisonTerm::GreaterOrEqual, "thisMonth"));
+    dateComps.append(SearchCriterionDescription::Comparator(i18nc("@label", "This Year"), Nepomuk::Query::ComparisonTerm::GreaterOrEqual, "thisYear"));
     foreach (const SearchCriterionDescription::Comparator& comp, defaultComps) {
         dateComps.append(comp);
     }
@@ -156,9 +181,11 @@ void SearchCriterionSelector::createDescriptions()
     DateValue* dateValue = new DateValue(this);
     dateValue->hide();
     SearchCriterionDescription date(i18nc("@label", "Date:"),
-                                    "lastModified",
+                                    Nepomuk::Vocabulary::NIE::lastModified(),
                                     dateComps,
                                     dateValue);
+    Q_ASSERT(static_cast<int>(SearchCriterionSelector::Date) == 0);
+    m_descriptions.append(date);
 
     // add "Size" description
     QList<SearchCriterionDescription::Comparator> sizeComps = defaultComps;
@@ -167,34 +194,49 @@ void SearchCriterionSelector::createDescriptions()
     SizeValue* sizeValue = new SizeValue(this);
     sizeValue->hide();
     SearchCriterionDescription size(i18nc("@label", "Size:"),
-                                    "contentSize",
+                                    Soprano::Vocabulary::NAO::lastModified(), // TODO
                                     sizeComps,
                                     sizeValue);
+    Q_ASSERT(static_cast<int>(SearchCriterionSelector::Size) == 1);
+    m_descriptions.append(size);
 
     // add "Tag" description
     QList<SearchCriterionDescription::Comparator> tagComps;
     tagComps.append(SearchCriterionDescription::Comparator(i18nc("@label All (tags)", "All")));
-    tagComps.append(SearchCriterionDescription::Comparator(i18nc("@label", "Equal to"), ":"));
+    tagComps.append(SearchCriterionDescription::Comparator(i18nc("@label", "Equal to"), Nepomuk::Query::ComparisonTerm::Equal));
+    // It is unclear yet how to express != for tags with the new Nepomuk query API. Disable it for KDE 4.4,
+    // but leave the translation string there to be able to enable this functionality for KDE 4.4.x:
+    const QString dummy = i18nc("@label", "Not Equal to");
+    Q_UNUSED(dummy);
+    //tagComps.append(SearchCriterionDescription::Comparator(i18nc("@label", "Not Equal to"), Nepomuk::Query::ComparisonTerm::Equal)); // TODO
 
     TagValue* tagValue = new TagValue(this);
     tagValue->hide();
     SearchCriterionDescription tag(i18nc("@label", "Tag:"),
-                                   "tag",
+                                   Soprano::Vocabulary::NAO::hasTag(),
                                    tagComps,
                                    tagValue);
-
-    Q_ASSERT(static_cast<int>(SearchCriterionSelector::Date) == 0);
-    Q_ASSERT(static_cast<int>(SearchCriterionSelector::Size) == 1);
     Q_ASSERT(static_cast<int>(SearchCriterionSelector::Tag) == 2);
-    m_descriptions.append(date);
-    m_descriptions.append(size);
     m_descriptions.append(tag);
 
+    // add "Rating" description
+    QList<SearchCriterionDescription::Comparator> ratingComps = defaultComps;
+    ratingComps.insert(0, SearchCriterionDescription::Comparator(i18nc("@label Any (rating)", "Any")));
+
+    RatingValue* ratingValue = new RatingValue(this);
+    ratingValue->hide();
+    SearchCriterionDescription rating(i18nc("@label", "Rating:"),
+                                      Soprano::Vocabulary::NAO::numericRating(),
+                                      ratingComps,
+                                      ratingValue);
+    Q_ASSERT(static_cast<int>(SearchCriterionSelector::Rating) == 3);
+    m_descriptions.append(rating);
+
     // add all descriptions to the combo box and connect the value widgets
     int i = 0;
     foreach (const SearchCriterionDescription& desc, m_descriptions) {
         m_descriptionsBox->addItem(desc.name(), i);
-        connect(desc.valueWidget(), SIGNAL(valueChanged(QString)), this, SIGNAL(criterionChanged()));
+        connect(desc.valueWidget(), SIGNAL(valueChanged(Nepomuk::Query::LiteralTerm)), this, SIGNAL(criterionChanged()));
         ++i;
     }
 }