X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/006f667ab14aff2d067373e7e88bde4800b2d9c2..b8f8c9027549e3d317dbe1659cb925bb1943c168:/src/search/dolphinfacetswidget.cpp diff --git a/src/search/dolphinfacetswidget.cpp b/src/search/dolphinfacetswidget.cpp index b7315a01c..7c0e97f86 100644 --- a/src/search/dolphinfacetswidget.cpp +++ b/src/search/dolphinfacetswidget.cpp @@ -19,40 +19,46 @@ #include "dolphinfacetswidget.h" -#include +#include + #include #include #include -#include #include -#include +#include DolphinFacetsWidget::DolphinFacetsWidget(QWidget* parent) : QWidget(parent), - m_documents(0), - m_images(0), - m_audio(0), - m_videos(0), - m_anytime(0), - m_today(0), - m_yesterday(0), - m_thisWeek(0), - m_thisMonth(0), - m_thisYear(0), - m_anyRating(0), - m_oneOrMore(0), - m_twoOrMore(0), - m_threeOrMore(0), - m_fourOrMore(0), - m_maxRating(0) + m_folders(nullptr), + m_documents(nullptr), + m_images(nullptr), + m_audio(nullptr), + m_videos(nullptr), + m_anytime(nullptr), + m_today(nullptr), + m_yesterday(nullptr), + m_thisWeek(nullptr), + m_thisMonth(nullptr), + m_thisYear(nullptr), + m_anyRating(nullptr), + m_oneOrMore(nullptr), + m_twoOrMore(nullptr), + m_threeOrMore(nullptr), + m_fourOrMore(nullptr), + m_maxRating(nullptr) { - m_documents = createCheckBox(i18nc("@option:check", "Documents")); - m_images = createCheckBox(i18nc("@option:check", "Images")); - m_audio = createCheckBox(i18nc("@option:check", "Audio Files")); - m_videos = createCheckBox(i18nc("@option:check", "Videos")); + QButtonGroup* filetypeGroup = new QButtonGroup(this); + m_anyType = createRadioButton(i18nc("@option:check", "Any"), filetypeGroup); + m_folders = createRadioButton(i18nc("@option:check", "Folders"), 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_folders); typeLayout->addWidget(m_documents); typeLayout->addWidget(m_images); typeLayout->addWidget(m_audio); @@ -100,6 +106,7 @@ DolphinFacetsWidget::DolphinFacetsWidget(QWidget* parent) : topLayout->addLayout(ratingLayout); topLayout->addStretch(); + m_anyType->setChecked(true); m_anytime->setChecked(true); m_anyRating->setChecked(true); } @@ -108,9 +115,10 @@ DolphinFacetsWidget::~DolphinFacetsWidget() { } -#ifdef HAVE_BALOO -Baloo::Term DolphinFacetsWidget::ratingTerm() const +QString DolphinFacetsWidget::ratingTerm() const { + QStringList terms; + if (!m_anyRating->isChecked()) { int stars = 1; // represents m_oneOrMore if (m_twoOrMore->isChecked()) { @@ -124,15 +132,9 @@ Baloo::Term DolphinFacetsWidget::ratingTerm() const } const int rating = stars * 2; - - Baloo::Term term("rating", rating, Baloo::Term::GreaterEqual); - return term; + terms << QStringLiteral("rating>=%1").arg(rating); } - return Baloo::Term(); - - /* - // FIXME: Handle date time filters if (!m_anytime->isChecked()) { QDate date = QDate::currentDate(); // represents m_today if (m_yesterday->isChecked()) { @@ -145,53 +147,137 @@ Baloo::Term DolphinFacetsWidget::ratingTerm() const date = date.addDays(1 - date.dayOfYear()); } - Nepomuk2::Query::ComparisonTerm term(Nepomuk2::Vocabulary::NIE::lastModified(), - Nepomuk2::Query::LiteralTerm(QDateTime(date)), - Nepomuk2::Query::ComparisonTerm::GreaterOrEqual); - andTerm.addSubTerm(term); + terms << QStringLiteral("modified>=%1").arg(date.toString(Qt::ISODate)); } - */ + + return terms.join(QStringLiteral(" AND ")); } -QStringList DolphinFacetsWidget::facetTypes() const +QString DolphinFacetsWidget::facetType() const { - QStringList types; - if (m_documents->isChecked()) { - types << "Document"; + if (m_folders->isChecked()) { + return QStringLiteral("Folder"); + } else if (m_documents->isChecked()) { + return QStringLiteral("Document"); + } else if (m_images->isChecked()) { + return QStringLiteral("Image"); + } else if (m_audio->isChecked()) { + return QStringLiteral("Audio"); + } else if (m_videos->isChecked()) { + return QStringLiteral("Video"); } - if (m_images->isChecked()) { - types << "Image"; - } + return QString(); +} + +bool DolphinFacetsWidget::isRatingTerm(const QString& term) const +{ + const QStringList subTerms = term.split(' ', QString::SkipEmptyParts); + + // If term has sub terms, then sone of the sub terms are always "rating" and "modified" terms. + bool containsRating = false; + bool containsModified = false; - if (m_audio->isChecked()) { - types << "Audio"; + foreach (const QString& subTerm, subTerms) { + if (subTerm.startsWith(QLatin1String("rating>="))) { + containsRating = true; + } else if (subTerm.startsWith(QLatin1String("modified>="))) { + containsModified = true; + } } - if (m_videos->isChecked()) { - types << "Video"; + return containsModified || containsRating; +} + +void DolphinFacetsWidget::setRatingTerm(const QString& 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. + QStringList subTerms = term.split(' ', QString::SkipEmptyParts); + + foreach (const QString& subTerm, subTerms) { + if (subTerm.startsWith(QLatin1String("modified>="))) { + const QString value = subTerm.mid(10); + const QDate date = QDate::fromString(value, Qt::ISODate); + setTimespan(date); + } else if (subTerm.startsWith(QLatin1String("rating>="))) { + const QString value = subTerm.mid(8); + const int stars = value.toInt() / 2; + setRating(stars); + } } +} - return types; +void DolphinFacetsWidget::setFacetType(const QString& type) +{ + 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); + } } -#endif +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; -QCheckBox* DolphinFacetsWidget::createCheckBox(const QString& text) + 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) { - QCheckBox* checkBox = new QCheckBox(text); - connect(checkBox, SIGNAL(clicked()), this, SIGNAL(facetChanged())); - return checkBox; + 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; } -#include "dolphinfacetswidget.moc"