X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/4f24794fc32cd94dfbd473fa8dbc4b504c20bcb3..233a08164f79d9909693c5de438f856467ad5b76:/src/search/searchcriterionselector.cpp diff --git a/src/search/searchcriterionselector.cpp b/src/search/searchcriterionselector.cpp index 34756cc30..641690536 100644 --- a/src/search/searchcriterionselector.cpp +++ b/src/search/searchcriterionselector.cpp @@ -20,8 +20,16 @@ #include "searchcriterionselector.h" +#define DISABLE_NEPOMUK_LEGACY +#include +#include +#include + #include "searchcriterionvalue.h" +#include +#include + #include #include #include @@ -30,6 +38,8 @@ #include #include +#include + SearchCriterionSelector::SearchCriterionSelector(Type type, QWidget* parent) : QWidget(parent), m_layout(0), @@ -53,15 +63,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 +84,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 +95,24 @@ 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() + '"'; + kDebug() << "identifier:" << descr.identifier(); + kDebug() << "value:" << m_valueWidget->value(); + kDebug() << "comp:" << comp.value; + + const Nepomuk::Query::ComparisonTerm term(descr.identifier(), + m_valueWidget->value(), + comp.value); + kDebug() << "term: " << term; + return term; +} + +SearchCriterionSelector::Type SearchCriterionSelector::type() const +{ + return static_cast(m_descriptionsBox->currentIndex()); } void SearchCriterionSelector::slotDescriptionChanged(int index) @@ -110,7 +136,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 +151,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 +168,18 @@ void SearchCriterionSelector::createDescriptions() // TODO: maybe this creation should be forwarded to a factory if // the number of items increases in future QList 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 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::Equal, "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 +187,11 @@ void SearchCriterionSelector::createDescriptions() DateValue* dateValue = new DateValue(this); dateValue->hide(); SearchCriterionDescription date(i18nc("@label", "Date:"), - "lastModified", + Soprano::Vocabulary::NAO::lastModified(), dateComps, dateValue); + Q_ASSERT(static_cast(SearchCriterionSelector::Date) == 0); + m_descriptions.append(date); // add "Size" description QList sizeComps = defaultComps; @@ -167,34 +200,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(SearchCriterionSelector::Size) == 1); + m_descriptions.append(size); // add "Tag" description QList 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(SearchCriterionSelector::Date) == 0); - Q_ASSERT(static_cast(SearchCriterionSelector::Size) == 1); Q_ASSERT(static_cast(SearchCriterionSelector::Tag) == 2); - m_descriptions.append(date); - m_descriptions.append(size); m_descriptions.append(tag); + // add "Rating" description + QList 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(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; } }