]>
cloud.milkyroute.net Git - dolphin.git/blob - src/search/dolphinfacetswidget.cpp
1 /***************************************************************************
2 * Copyright (C) 2012 by Peter Penz <peter.penz19@gmail.com> *
4 * This program is free software; you can redistribute it and/or modify *
5 * it under the terms of the GNU General Public License as published by *
6 * the Free Software Foundation; either version 2 of the License, or *
7 * (at your option) any later version. *
9 * This program is distributed in the hope that it will be useful, *
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
12 * GNU General Public License for more details. *
14 * You should have received a copy of the GNU General Public License *
15 * along with this program; if not, write to the *
16 * Free Software Foundation, Inc., *
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
18 * **************************************************************************/
20 #include "dolphinfacetswidget.h"
23 #include <QButtonGroup>
26 #include <QRadioButton>
27 #include <QHBoxLayout>
28 #include <QVBoxLayout>
30 DolphinFacetsWidget::DolphinFacetsWidget(QWidget
* parent
) :
49 m_documents
= createCheckBox(i18nc("@option:check", "Documents"));
50 m_images
= createCheckBox(i18nc("@option:check", "Images"));
51 m_audio
= createCheckBox(i18nc("@option:check", "Audio Files"));
52 m_videos
= createCheckBox(i18nc("@option:check", "Videos"));
54 QVBoxLayout
* typeLayout
= new QVBoxLayout();
55 typeLayout
->setSpacing(0);
56 typeLayout
->addWidget(m_documents
);
57 typeLayout
->addWidget(m_images
);
58 typeLayout
->addWidget(m_audio
);
59 typeLayout
->addWidget(m_videos
);
60 typeLayout
->addStretch();
62 QButtonGroup
* timespanGroup
= new QButtonGroup(this);
63 m_anytime
= createRadioButton(i18nc("@option:option", "Anytime"), timespanGroup
);
64 m_today
= createRadioButton(i18nc("@option:option", "Today"), timespanGroup
);
65 m_yesterday
= createRadioButton(i18nc("@option:option", "Yesterday"), timespanGroup
);
66 m_thisWeek
= createRadioButton(i18nc("@option:option", "This Week"), timespanGroup
);
67 m_thisMonth
= createRadioButton(i18nc("@option:option", "This Month"), timespanGroup
);
68 m_thisYear
= createRadioButton(i18nc("@option:option", "This Year"), timespanGroup
);
70 QVBoxLayout
* timespanLayout
= new QVBoxLayout();
71 timespanLayout
->setSpacing(0);
72 timespanLayout
->addWidget(m_anytime
);
73 timespanLayout
->addWidget(m_today
);
74 timespanLayout
->addWidget(m_yesterday
);
75 timespanLayout
->addWidget(m_thisWeek
);
76 timespanLayout
->addWidget(m_thisMonth
);
77 timespanLayout
->addWidget(m_thisYear
);
78 timespanLayout
->addStretch();
80 QButtonGroup
* ratingGroup
= new QButtonGroup(this);
81 m_anyRating
= createRadioButton(i18nc("@option:option", "Any Rating"), ratingGroup
);
82 m_oneOrMore
= createRadioButton(i18nc("@option:option", "1 or more"), ratingGroup
);
83 m_twoOrMore
= createRadioButton(i18nc("@option:option", "2 or more"), ratingGroup
);
84 m_threeOrMore
= createRadioButton(i18nc("@option:option", "3 or more"), ratingGroup
);
85 m_fourOrMore
= createRadioButton(i18nc("@option:option", "4 or more"), ratingGroup
);
86 m_maxRating
= createRadioButton(i18nc("@option:option", "Highest Rating"), ratingGroup
);
88 QVBoxLayout
* ratingLayout
= new QVBoxLayout();
89 ratingLayout
->setSpacing(0);
90 ratingLayout
->addWidget(m_anyRating
);
91 ratingLayout
->addWidget(m_oneOrMore
);
92 ratingLayout
->addWidget(m_twoOrMore
);
93 ratingLayout
->addWidget(m_threeOrMore
);
94 ratingLayout
->addWidget(m_fourOrMore
);
95 ratingLayout
->addWidget(m_maxRating
);
97 QHBoxLayout
* topLayout
= new QHBoxLayout(this);
98 topLayout
->addLayout(typeLayout
);
99 topLayout
->addLayout(timespanLayout
);
100 topLayout
->addLayout(ratingLayout
);
101 topLayout
->addStretch();
103 m_anytime
->setChecked(true);
104 m_anyRating
->setChecked(true);
107 DolphinFacetsWidget::~DolphinFacetsWidget()
112 Baloo::Term
DolphinFacetsWidget::ratingTerm() const
114 Baloo::Term ratingTerm
;
115 Baloo::Term modifiedTerm
;
117 if (!m_anyRating
->isChecked()) {
118 int stars
= 1; // represents m_oneOrMore
119 if (m_twoOrMore
->isChecked()) {
121 } else if (m_threeOrMore
->isChecked()) {
123 } else if (m_fourOrMore
->isChecked()) {
125 } else if (m_maxRating
->isChecked()) {
129 const int rating
= stars
* 2;
130 ratingTerm
= Baloo::Term("rating", rating
, Baloo::Term::GreaterEqual
);
133 if (!m_anytime
->isChecked()) {
134 QDate date
= QDate::currentDate(); // represents m_today
135 if (m_yesterday
->isChecked()) {
136 date
= date
.addDays(-1);
137 } else if (m_thisWeek
->isChecked()) {
138 date
= date
.addDays(1 - date
.dayOfWeek());
139 } else if (m_thisMonth
->isChecked()) {
140 date
= date
.addDays(1 - date
.day());
141 } else if (m_thisYear
->isChecked()) {
142 date
= date
.addDays(1 - date
.dayOfYear());
145 modifiedTerm
= Baloo::Term("modified", date
, Baloo::Term::GreaterEqual
);
148 if (ratingTerm
.isValid() && modifiedTerm
.isValid()) {
149 Baloo::Term
term(Baloo::Term::And
);
150 term
.addSubTerm(ratingTerm
);
151 term
.addSubTerm(modifiedTerm
);
154 } else if (modifiedTerm
.isValid()) {
156 } else if (ratingTerm
.isValid()) {
160 return Baloo::Term();
163 QStringList
DolphinFacetsWidget::facetTypes() const
166 if (m_documents
->isChecked()) {
170 if (m_images
->isChecked()) {
174 if (m_audio
->isChecked()) {
178 if (m_videos
->isChecked()) {
188 QCheckBox
* DolphinFacetsWidget::createCheckBox(const QString
& text
)
190 QCheckBox
* checkBox
= new QCheckBox(text
);
191 connect(checkBox
, SIGNAL(clicked()), this, SIGNAL(facetChanged()));
195 QRadioButton
* DolphinFacetsWidget::createRadioButton(const QString
& text
,
198 QRadioButton
* button
= new QRadioButton(text
);
199 connect(button
, SIGNAL(clicked()), this, SIGNAL(facetChanged()));
200 group
->addButton(button
);
204 #include "dolphinfacetswidget.moc"