#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>
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);
{
}
-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();
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)
// 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);
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();
}
// 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);
}
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;
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;
}
}