#include <QHBoxLayout>
#include <QVBoxLayout>
-#ifdef HAVE_NEPOMUK
- #include <Nepomuk/Query/AndTerm>
- #include <Nepomuk/Query/ComparisonTerm>
- #include <Nepomuk/Query/LiteralTerm>
- #include <Nepomuk/Query/OrTerm>
- #include <Nepomuk/Query/Query>
- #include <Nepomuk/Query/ResourceTypeTerm>
- #include <Nepomuk/Vocabulary/NFO>
- #include <Nepomuk/Vocabulary/NIE>
- #include <Soprano/Vocabulary/NAO>
-#endif
-
DolphinFacetsWidget::DolphinFacetsWidget(QWidget* parent) :
QWidget(parent),
m_documents(0),
m_fourOrMore(0),
m_maxRating(0)
{
- m_documents = createCheckBox(i18nc("@option:check", "Documents"));
- m_images = createCheckBox(i18nc("@option:check", "Images"));
- m_audio = createCheckBox(i18nc("@option:check", "Audio"));
- m_videos = createCheckBox(i18nc("@option:check", "Videos"));
+ QButtonGroup* filetypeGroup = new QButtonGroup(this);
+ m_anyType = createRadioButton(i18nc("@option:check", "Any"), filetypeGroup);
+ m_documents = createRadioButton(i18nc("@option:check", "Documents"), filetypeGroup);
+ m_images = createRadioButton(i18nc("@option:check", "Images"), filetypeGroup);
+ m_audio = createRadioButton(i18nc("@option:check", "Audio Files"), filetypeGroup);
+ m_videos = createRadioButton(i18nc("@option:check", "Videos"), filetypeGroup);
QVBoxLayout* typeLayout = new QVBoxLayout();
typeLayout->setSpacing(0);
+ typeLayout->addWidget(m_anyType);
typeLayout->addWidget(m_documents);
typeLayout->addWidget(m_images);
typeLayout->addWidget(m_audio);
m_twoOrMore = createRadioButton(i18nc("@option:option", "2 or more"), ratingGroup);
m_threeOrMore = createRadioButton(i18nc("@option:option", "3 or more"), ratingGroup);
m_fourOrMore = createRadioButton(i18nc("@option:option", "4 or more"), ratingGroup);
- m_maxRating = createRadioButton(i18nc("@option:option", "Maximum Rating"), ratingGroup);
+ m_maxRating = createRadioButton(i18nc("@option:option", "Highest Rating"), ratingGroup);
QVBoxLayout* ratingLayout = new QVBoxLayout();
ratingLayout->setSpacing(0);
topLayout->addLayout(ratingLayout);
topLayout->addStretch();
+ m_anyType->setChecked(true);
m_anytime->setChecked(true);
m_anyRating->setChecked(true);
}
{
}
-#ifdef HAVE_NEPOMUK
-Nepomuk::Query::Term DolphinFacetsWidget::facetsTerm() const
+#ifdef HAVE_BALOO
+Baloo::Term DolphinFacetsWidget::ratingTerm() const
{
- Nepomuk::Query::AndTerm andTerm;
-
- const bool hasTypeFilter = m_documents->isChecked() ||
- m_images->isChecked() ||
- m_audio->isChecked() ||
- m_videos->isChecked();
- if (hasTypeFilter) {
- Nepomuk::Query::OrTerm orTerm;
-
- if (m_documents->isChecked()) {
- orTerm.addSubTerm(Nepomuk::Query::ResourceTypeTerm(Nepomuk::Vocabulary::NFO::Document()));
- }
-
- if (m_images->isChecked()) {
- orTerm.addSubTerm(Nepomuk::Query::ResourceTypeTerm(Nepomuk::Vocabulary::NFO::Image()));
- }
-
- if (m_audio->isChecked()) {
- orTerm.addSubTerm(Nepomuk::Query::ComparisonTerm(Nepomuk::Vocabulary::NIE::mimeType(),
- Nepomuk::Query::LiteralTerm("audio")));
- }
-
- if (m_videos->isChecked()) {
- orTerm.addSubTerm(Nepomuk::Query::ComparisonTerm(Nepomuk::Vocabulary::NIE::mimeType(),
- Nepomuk::Query::LiteralTerm("video")));
- }
-
- andTerm.addSubTerm(orTerm);
- }
+ Baloo::Term ratingTerm;
+ Baloo::Term modifiedTerm;
if (!m_anyRating->isChecked()) {
int stars = 1; // represents m_oneOrMore
}
const int rating = stars * 2;
- Nepomuk::Query::ComparisonTerm term(Soprano::Vocabulary::NAO::numericRating(),
- Nepomuk::Query::LiteralTerm(rating),
- Nepomuk::Query::ComparisonTerm::GreaterOrEqual);
- andTerm.addSubTerm(term);
+ ratingTerm = Baloo::Term("rating", rating, Baloo::Term::GreaterEqual);
}
if (!m_anytime->isChecked()) {
QDate date = QDate::currentDate(); // represents m_today
if (m_yesterday->isChecked()) {
- date.addDays(-1);
+ date = date.addDays(-1);
} else if (m_thisWeek->isChecked()) {
- date.addDays(1 - date.dayOfWeek());
+ date = date.addDays(1 - date.dayOfWeek());
} else if (m_thisMonth->isChecked()) {
- date.addDays(1 - date.day());
+ date = date.addDays(1 - date.day());
} else if (m_thisYear->isChecked()) {
- date.addDays(1 - date.dayOfYear());
+ date = date.addDays(1 - date.dayOfYear());
+ }
+
+ modifiedTerm = Baloo::Term("modified", date, Baloo::Term::GreaterEqual);
+ }
+
+ if (ratingTerm.isValid() && modifiedTerm.isValid()) {
+ Baloo::Term term(Baloo::Term::And);
+ term.addSubTerm(ratingTerm);
+ term.addSubTerm(modifiedTerm);
+
+ return term;
+ } else if (modifiedTerm.isValid()) {
+ return modifiedTerm;
+ } else if (ratingTerm.isValid()) {
+ return ratingTerm;
+ }
+
+ return Baloo::Term();
+}
+
+QString DolphinFacetsWidget::facetType() const
+{
+ if (m_documents->isChecked()) {
+ return QLatin1String("Document");
+ } else if (m_images->isChecked()) {
+ return QLatin1String("Image");
+ } else if (m_audio->isChecked()) {
+ return QLatin1String("Audio");
+ } else if (m_videos->isChecked()) {
+ return QLatin1String("Video");
+ }
+
+ return QString();
+}
+
+bool DolphinFacetsWidget::isRatingTerm(const Baloo::Term& term) const
+{
+ const QList<Baloo::Term> subTerms = term.subTerms();
+ if (subTerms.isEmpty()) {
+ // If term has no sub terms, then the term itself is either a "rating" term
+ // or a "modified" term.
+ return term.property() == QLatin1String("modified") ||
+ term.property() == QLatin1String("rating");
+
+ } else if (subTerms.size() == 2) {
+ // If term has sub terms, then the sub terms are always "rating" and "modified" terms.
+
+ QStringList properties;
+ foreach (const Baloo::Term& subTerm, subTerms) {
+ properties << subTerm.property();
}
- Nepomuk::Query::ComparisonTerm term(Nepomuk::Vocabulary::NIE::lastModified(),
- Nepomuk::Query::LiteralTerm(QDateTime(date)),
- Nepomuk::Query::ComparisonTerm::GreaterOrEqual);
- andTerm.addSubTerm(term);
+ return properties.contains(QLatin1String("modified")) &&
+ properties.contains(QLatin1String("rating"));
+ }
+
+ return false;
+}
+
+void DolphinFacetsWidget::setRatingTerm(const Baloo::Term& term)
+{
+ // If term has sub terms, then the sub terms are always "rating" and "modified" terms.
+ // If term has no sub terms, then the term itself is either a "rating" term or a "modified"
+ // term. To avoid code duplication we add term to subTerms list, if the list is empty.
+ QList<Baloo::Term> subTerms = term.subTerms();
+ if (subTerms.isEmpty()) {
+ subTerms << term;
}
- return andTerm;
+ foreach (const Baloo::Term& subTerm, subTerms) {
+ const QString property = subTerm.property();
+
+ if (property == QLatin1String("modified")) {
+ const QDate date = subTerm.value().toDate();
+ setTimespan(date);
+ } else if (property == QLatin1String("rating")) {
+ const int stars = subTerm.value().toInt() / 2;
+ setRating(stars);
+ }
+ }
}
+
#endif
-QCheckBox* DolphinFacetsWidget::createCheckBox(const QString& text)
+void DolphinFacetsWidget::setFacetType(const QString& type)
{
- QCheckBox* checkBox = new QCheckBox(text);
- connect(checkBox, SIGNAL(clicked()), this, SIGNAL(facetChanged()));
- return checkBox;
+ if (type == QLatin1String("Document")) {
+ m_documents->setChecked(true);
+ } else if (type == QLatin1String("Image")) {
+ m_images->setChecked(true);
+ } else if (type == QLatin1String("Audio")) {
+ m_audio->setChecked(true);
+ } else if (type == QLatin1String("Video")) {
+ m_videos->setChecked(true);
+ } else {
+ m_anyType->setChecked(true);
+ }
+}
+
+void DolphinFacetsWidget::setRating(const int stars)
+{
+ switch (stars) {
+ case 5:
+ m_maxRating->setChecked(true);
+ break;
+
+ case 4:
+ m_fourOrMore->setChecked(true);
+ break;
+
+ case 3:
+ m_threeOrMore->setChecked(true);
+ break;
+
+ case 2:
+ m_twoOrMore->setChecked(true);
+ break;
+
+ case 1:
+ m_oneOrMore->setChecked(true);
+ break;
+
+ default:
+ m_anyRating->setChecked(true);
+ }
+}
+
+void DolphinFacetsWidget::setTimespan(const QDate& date)
+{
+ const QDate currentDate = QDate::currentDate();
+ const int days = date.daysTo(currentDate);
+
+ if (days <= 0) {
+ m_today->setChecked(true);
+ } else if (days <= 1) {
+ m_yesterday->setChecked(true);
+ } else if (days <= currentDate.dayOfWeek()) {
+ m_thisWeek->setChecked(true);
+ } else if (days <= currentDate.day()) {
+ m_thisMonth->setChecked(true);
+ } else if (days <= currentDate.dayOfYear()) {
+ m_thisYear->setChecked(true);
+ } else {
+ m_anytime->setChecked(true);
+ }
}
QRadioButton* DolphinFacetsWidget::createRadioButton(const QString& text,
QButtonGroup* group)
{
QRadioButton* button = new QRadioButton(text);
- connect(button, SIGNAL(clicked()), this, SIGNAL(facetChanged()));
+ connect(button, &QRadioButton::clicked, this, &DolphinFacetsWidget::facetChanged);
group->addButton(button);
return button;
}