61
61
#include <lib/semanticinfo/tagmodel.h>
67
68
* An AbstractSortedDirModelFilter which filters on the file names
69
class NameFilter : public AbstractSortedDirModelFilter {
70
class NameFilter : public AbstractSortedDirModelFilter
75
NameFilter(SortedDirModel* model)
76
: AbstractSortedDirModelFilter(model)
81
virtual bool needsSemanticInfo() const {
85
virtual bool acceptsIndex(const QModelIndex& index) const {
86
if (mText.isEmpty()) {
91
return index.data().toString().contains(mText, Qt::CaseInsensitive);
92
default: /*DoesNotContain:*/
93
return !index.data().toString().contains(mText, Qt::CaseInsensitive);
97
void setText(const QString& text) {
99
model()->applyFilters();
102
void setMode(Mode mode) {
104
model()->applyFilters();
77
NameFilter(SortedDirModel* model)
78
: AbstractSortedDirModelFilter(model)
83
virtual bool needsSemanticInfo() const {
87
virtual bool acceptsIndex(const QModelIndex& index) const {
88
if (mText.isEmpty()) {
93
return index.data().toString().contains(mText, Qt::CaseInsensitive);
94
default: /*DoesNotContain:*/
95
return !index.data().toString().contains(mText, Qt::CaseInsensitive);
99
void setText(const QString& text)
102
model()->applyFilters();
105
void setMode(Mode mode)
108
model()->applyFilters();
112
116
struct NameFilterWidgetPrivate {
113
QPointer<NameFilter> mFilter;
114
KComboBox* mModeComboBox;
115
KLineEdit* mLineEdit;
117
QPointer<NameFilter> mFilter;
118
KComboBox* mModeComboBox;
119
KLineEdit* mLineEdit;
118
122
NameFilterWidget::NameFilterWidget(SortedDirModel* model)
119
123
: d(new NameFilterWidgetPrivate)
121
d->mFilter = new NameFilter(model);
123
d->mModeComboBox = new KComboBox;
124
d->mModeComboBox->addItem(i18n("Name contains"), QVariant(NameFilter::Contains));
125
d->mModeComboBox->addItem(i18n("Name does not contain"), QVariant(NameFilter::DoesNotContain));
127
d->mLineEdit = new KLineEdit;
129
QHBoxLayout* layout = new QHBoxLayout(this);
130
layout->setMargin(0);
131
layout->setSpacing(2);
132
layout->addWidget(d->mModeComboBox);
133
layout->addWidget(d->mLineEdit);
135
QTimer* timer = new QTimer(this);
136
timer->setInterval(350);
137
timer->setSingleShot(true);
138
connect(timer, SIGNAL(timeout()), SLOT(applyNameFilter()));
140
connect(d->mLineEdit, SIGNAL(textChanged(const QString &)),
141
timer, SLOT(start()));
143
connect(d->mModeComboBox, SIGNAL(currentIndexChanged(int)),
144
SLOT(applyNameFilter()));
146
QTimer::singleShot(0, d->mLineEdit, SLOT(setFocus()));
125
d->mFilter = new NameFilter(model);
127
d->mModeComboBox = new KComboBox;
128
d->mModeComboBox->addItem(i18n("Name contains"), QVariant(NameFilter::Contains));
129
d->mModeComboBox->addItem(i18n("Name does not contain"), QVariant(NameFilter::DoesNotContain));
131
d->mLineEdit = new KLineEdit;
133
QHBoxLayout* layout = new QHBoxLayout(this);
134
layout->setMargin(0);
135
layout->setSpacing(2);
136
layout->addWidget(d->mModeComboBox);
137
layout->addWidget(d->mLineEdit);
139
QTimer* timer = new QTimer(this);
140
timer->setInterval(350);
141
timer->setSingleShot(true);
142
connect(timer, SIGNAL(timeout()), SLOT(applyNameFilter()));
144
connect(d->mLineEdit, SIGNAL(textChanged(QString)),
145
timer, SLOT(start()));
147
connect(d->mModeComboBox, SIGNAL(currentIndexChanged(int)),
148
SLOT(applyNameFilter()));
150
QTimer::singleShot(0, d->mLineEdit, SLOT(setFocus()));
149
153
NameFilterWidget::~NameFilterWidget()
155
void NameFilterWidget::applyNameFilter() {
156
QVariant data = d->mModeComboBox->itemData(d->mModeComboBox->currentIndex());
157
d->mFilter->setMode(NameFilter::Mode(data.toInt()));
158
d->mFilter->setText(d->mLineEdit->text());
159
void NameFilterWidget::applyNameFilter()
161
QVariant data = d->mModeComboBox->itemData(d->mModeComboBox->currentIndex());
162
d->mFilter->setMode(NameFilter::Mode(data.toInt()));
163
d->mFilter->setText(d->mLineEdit->text());
162
167
* An AbstractSortedDirModelFilter which filters on the file dates
164
class DateFilter : public AbstractSortedDirModelFilter {
169
class DateFilter : public AbstractSortedDirModelFilter
171
DateFilter(SortedDirModel* model)
172
: AbstractSortedDirModelFilter(model)
173
, mMode(GreaterOrEqual)
176
virtual bool needsSemanticInfo() const {
180
virtual bool acceptsIndex(const QModelIndex& index) const {
181
if (!mDate.isValid()) {
184
KFileItem fileItem = model()->itemForSourceIndex(index);
185
QDate date = TimeUtils::dateTimeForFileItem(fileItem).date();
188
return date >= mDate;
190
return date == mDate;
191
default: /* LessOrEqual */
192
return date <= mDate;
196
void setDate(const QDate& date) {
198
model()->applyFilters();
201
void setMode(Mode mode) {
203
model()->applyFilters();
177
DateFilter(SortedDirModel* model)
178
: AbstractSortedDirModelFilter(model)
179
, mMode(GreaterOrEqual)
182
virtual bool needsSemanticInfo() const {
186
virtual bool acceptsIndex(const QModelIndex& index) const {
187
if (!mDate.isValid()) {
190
KFileItem fileItem = model()->itemForSourceIndex(index);
191
QDate date = TimeUtils::dateTimeForFileItem(fileItem).date();
194
return date >= mDate;
196
return date == mDate;
197
default: /* LessOrEqual */
198
return date <= mDate;
202
void setDate(const QDate& date)
205
model()->applyFilters();
208
void setMode(Mode mode)
211
model()->applyFilters();
211
219
struct DateFilterWidgetPrivate {
212
QPointer<DateFilter> mFilter;
213
KComboBox* mModeComboBox;
214
DateWidget* mDateWidget;
220
QPointer<DateFilter> mFilter;
221
KComboBox* mModeComboBox;
222
DateWidget* mDateWidget;
217
225
DateFilterWidget::DateFilterWidget(SortedDirModel* model)
218
226
: d(new DateFilterWidgetPrivate)
220
d->mFilter = new DateFilter(model);
222
d->mModeComboBox = new KComboBox;
223
d->mModeComboBox->addItem(i18n("Date >="), DateFilter::GreaterOrEqual);
224
d->mModeComboBox->addItem(i18n("Date ="), DateFilter::Equal);
225
d->mModeComboBox->addItem(i18n("Date <="), DateFilter::LessOrEqual);
227
d->mDateWidget = new DateWidget;
229
QHBoxLayout* layout = new QHBoxLayout(this);
230
layout->setMargin(0);
231
layout->addWidget(d->mModeComboBox);
232
layout->addWidget(d->mDateWidget);
234
connect(d->mDateWidget, SIGNAL(dateChanged(const QDate&)),
235
SLOT(applyDateFilter()));
236
connect(d->mModeComboBox, SIGNAL(currentIndexChanged(int)),
237
SLOT(applyDateFilter()));
228
d->mFilter = new DateFilter(model);
230
d->mModeComboBox = new KComboBox;
231
d->mModeComboBox->addItem(i18n("Date >="), DateFilter::GreaterOrEqual);
232
d->mModeComboBox->addItem(i18n("Date ="), DateFilter::Equal);
233
d->mModeComboBox->addItem(i18n("Date <="), DateFilter::LessOrEqual);
235
d->mDateWidget = new DateWidget;
237
QHBoxLayout* layout = new QHBoxLayout(this);
238
layout->setMargin(0);
239
layout->addWidget(d->mModeComboBox);
240
layout->addWidget(d->mDateWidget);
242
connect(d->mDateWidget, SIGNAL(dateChanged(QDate)),
243
SLOT(applyDateFilter()));
244
connect(d->mModeComboBox, SIGNAL(currentIndexChanged(int)),
245
SLOT(applyDateFilter()));
242
250
DateFilterWidget::~DateFilterWidget()
248
void DateFilterWidget::applyDateFilter() {
249
QVariant data = d->mModeComboBox->itemData(d->mModeComboBox->currentIndex());
250
d->mFilter->setMode(DateFilter::Mode(data.toInt()));
251
d->mFilter->setDate(d->mDateWidget->date());
256
void DateFilterWidget::applyDateFilter()
258
QVariant data = d->mModeComboBox->itemData(d->mModeComboBox->currentIndex());
259
d->mFilter->setMode(DateFilter::Mode(data.toInt()));
260
d->mFilter->setDate(d->mDateWidget->date());
254
263
#ifndef GWENVIEW_SEMANTICINFO_BACKEND_NONE
256
265
* An AbstractSortedDirModelFilter which filters on file ratings
258
class RatingFilter : public AbstractSortedDirModelFilter {
267
class RatingFilter : public AbstractSortedDirModelFilter
266
RatingFilter(SortedDirModel* model)
267
: AbstractSortedDirModelFilter(model)
269
, mMode(GreaterOrEqual) {}
271
virtual bool needsSemanticInfo() const {
275
virtual bool acceptsIndex(const QModelIndex& index) const {
276
SemanticInfo info = model()->semanticInfoForSourceIndex(index);
279
return info.mRating >= mRating;
281
return info.mRating == mRating;
282
default: /* LessOrEqual */
283
return info.mRating <= mRating;
287
void setRating(int value) {
289
model()->applyFilters();
292
void setMode(Mode mode) {
294
model()->applyFilters();
276
RatingFilter(SortedDirModel* model)
277
: AbstractSortedDirModelFilter(model)
279
, mMode(GreaterOrEqual) {}
281
virtual bool needsSemanticInfo() const {
285
virtual bool acceptsIndex(const QModelIndex& index) const {
286
SemanticInfo info = model()->semanticInfoForSourceIndex(index);
289
return info.mRating >= mRating;
291
return info.mRating == mRating;
292
default: /* LessOrEqual */
293
return info.mRating <= mRating;
297
void setRating(int value)
300
model()->applyFilters();
303
void setMode(Mode mode)
306
model()->applyFilters();
302
314
struct RatingWidgetPrivate {
303
KComboBox* mModeComboBox;
304
KRatingWidget* mRatingWidget;
305
QPointer<RatingFilter> mFilter;
315
KComboBox* mModeComboBox;
316
KRatingWidget* mRatingWidget;
317
QPointer<RatingFilter> mFilter;
308
320
RatingFilterWidget::RatingFilterWidget(SortedDirModel* model)
309
: d(new RatingWidgetPrivate) {
310
d->mModeComboBox = new KComboBox;
311
d->mModeComboBox->addItem(i18n("Rating >="), RatingFilter::GreaterOrEqual);
312
d->mModeComboBox->addItem(i18n("Rating =") , RatingFilter::Equal);
313
d->mModeComboBox->addItem(i18n("Rating <="), RatingFilter::LessOrEqual);
315
d->mRatingWidget = new KRatingWidget;
316
d->mRatingWidget->setHalfStepsEnabled(true);
317
d->mRatingWidget->setMaxRating(10);
319
QHBoxLayout* layout = new QHBoxLayout(this);
320
layout->setMargin(0);
321
layout->addWidget(d->mModeComboBox);
322
layout->addWidget(d->mRatingWidget);
324
d->mFilter = new RatingFilter(model);
326
QObject::connect(d->mModeComboBox, SIGNAL(currentIndexChanged(int)),
327
SLOT(updateFilterMode()));
329
QObject::connect(d->mRatingWidget, SIGNAL(ratingChanged(int)),
330
SLOT(slotRatingChanged(int)));
336
RatingFilterWidget::~RatingFilterWidget() {
342
void RatingFilterWidget::slotRatingChanged(int value) {
343
d->mFilter->setRating(value);
347
void RatingFilterWidget::updateFilterMode() {
348
QVariant data = d->mModeComboBox->itemData(d->mModeComboBox->currentIndex());
349
d->mFilter->setMode(RatingFilter::Mode(data.toInt()));
321
: d(new RatingWidgetPrivate)
323
d->mModeComboBox = new KComboBox;
324
d->mModeComboBox->addItem(i18n("Rating >="), RatingFilter::GreaterOrEqual);
325
d->mModeComboBox->addItem(i18n("Rating =") , RatingFilter::Equal);
326
d->mModeComboBox->addItem(i18n("Rating <="), RatingFilter::LessOrEqual);
328
d->mRatingWidget = new KRatingWidget;
329
d->mRatingWidget->setHalfStepsEnabled(true);
330
d->mRatingWidget->setMaxRating(10);
332
QHBoxLayout* layout = new QHBoxLayout(this);
333
layout->setMargin(0);
334
layout->addWidget(d->mModeComboBox);
335
layout->addWidget(d->mRatingWidget);
337
d->mFilter = new RatingFilter(model);
339
QObject::connect(d->mModeComboBox, SIGNAL(currentIndexChanged(int)),
340
SLOT(updateFilterMode()));
342
QObject::connect(d->mRatingWidget, SIGNAL(ratingChanged(int)),
343
SLOT(slotRatingChanged(int)));
348
RatingFilterWidget::~RatingFilterWidget()
354
void RatingFilterWidget::slotRatingChanged(int value)
356
d->mFilter->setRating(value);
359
void RatingFilterWidget::updateFilterMode()
361
QVariant data = d->mModeComboBox->itemData(d->mModeComboBox->currentIndex());
362
d->mFilter->setMode(RatingFilter::Mode(data.toInt()));
354
366
* An AbstractSortedDirModelFilter which filters on associated tags
356
class TagFilter : public AbstractSortedDirModelFilter {
368
class TagFilter : public AbstractSortedDirModelFilter
358
TagFilter(SortedDirModel* model)
359
: AbstractSortedDirModelFilter(model)
360
, mWantMatchingTag(true)
363
virtual bool needsSemanticInfo() const {
367
virtual bool acceptsIndex(const QModelIndex& index) const {
368
if (mTag.isEmpty()) {
371
SemanticInfo info = model()->semanticInfoForSourceIndex(index);
372
if (mWantMatchingTag) {
373
return info.mTags.contains(mTag);
375
return !info.mTags.contains(mTag);
379
void setTag(const SemanticInfoTag& tag) {
381
model()->applyFilters();
384
void setWantMatchingTag(bool value) {
385
mWantMatchingTag = value;
386
model()->applyFilters();
371
TagFilter(SortedDirModel* model)
372
: AbstractSortedDirModelFilter(model)
373
, mWantMatchingTag(true)
376
virtual bool needsSemanticInfo() const {
380
virtual bool acceptsIndex(const QModelIndex& index) const {
381
if (mTag.isEmpty()) {
384
SemanticInfo info = model()->semanticInfoForSourceIndex(index);
385
if (mWantMatchingTag) {
386
return info.mTags.contains(mTag);
388
return !info.mTags.contains(mTag);
392
void setTag(const SemanticInfoTag& tag)
395
model()->applyFilters();
398
void setWantMatchingTag(bool value)
400
mWantMatchingTag = value;
401
model()->applyFilters();
390
SemanticInfoTag mTag;
391
bool mWantMatchingTag;
405
SemanticInfoTag mTag;
406
bool mWantMatchingTag;
394
409
struct TagFilterWidgetPrivate {
395
KComboBox* mModeComboBox;
396
QComboBox* mTagComboBox;
397
QPointer<TagFilter> mFilter;
410
KComboBox* mModeComboBox;
411
QComboBox* mTagComboBox;
412
QPointer<TagFilter> mFilter;
400
415
TagFilterWidget::TagFilterWidget(SortedDirModel* model)
401
: d(new TagFilterWidgetPrivate) {
402
d->mFilter = new TagFilter(model);
404
d->mModeComboBox = new KComboBox;
405
d->mModeComboBox->addItem(i18n("Tagged"), QVariant(true));
406
d->mModeComboBox->addItem(i18n("Not Tagged"), QVariant(false));
408
d->mTagComboBox = new QComboBox;
410
QHBoxLayout* layout = new QHBoxLayout(this);
411
layout->setMargin(0);
412
layout->addWidget(d->mModeComboBox);
413
layout->addWidget(d->mTagComboBox);
415
AbstractSemanticInfoBackEnd* backEnd = model->semanticInfoBackEnd();
416
backEnd->refreshAllTags();
417
TagModel* tagModel = TagModel::createAllTagsModel(this, backEnd);
419
QCompleter* completer = new QCompleter(d->mTagComboBox);
420
completer->setCaseSensitivity(Qt::CaseInsensitive);
421
completer->setModel(tagModel);
422
d->mTagComboBox->setCompleter(completer);
423
d->mTagComboBox->setInsertPolicy(QComboBox::NoInsert);
424
d->mTagComboBox->setEditable(true);
425
d->mTagComboBox->setModel(tagModel);
426
d->mTagComboBox->setCurrentIndex(-1);
428
connect(d->mTagComboBox, SIGNAL(currentIndexChanged(int)), SLOT(updateTagSetFilter()) );
430
connect(d->mModeComboBox, SIGNAL(currentIndexChanged(int)), SLOT(updateTagSetFilter()) );
432
QTimer::singleShot(0, d->mTagComboBox, SLOT(setFocus()));
435
TagFilterWidget::~TagFilterWidget() {
441
void TagFilterWidget::updateTagSetFilter() {
442
QModelIndex index = d->mTagComboBox->model()->index(d->mTagComboBox->currentIndex(), 0);
443
if (!index.isValid()) {
444
kWarning() << "Invalid index";
447
SemanticInfoTag tag = index.data(TagModel::TagRole).toString();
448
d->mFilter->setTag(tag);
450
bool wantMatchingTag = d->mModeComboBox->itemData(d->mModeComboBox->currentIndex()).toBool();
451
d->mFilter->setWantMatchingTag(wantMatchingTag);
416
: d(new TagFilterWidgetPrivate)
418
d->mFilter = new TagFilter(model);
420
d->mModeComboBox = new KComboBox;
421
d->mModeComboBox->addItem(i18n("Tagged"), QVariant(true));
422
d->mModeComboBox->addItem(i18n("Not Tagged"), QVariant(false));
424
d->mTagComboBox = new QComboBox;
426
QHBoxLayout* layout = new QHBoxLayout(this);
427
layout->setMargin(0);
428
layout->addWidget(d->mModeComboBox);
429
layout->addWidget(d->mTagComboBox);
431
AbstractSemanticInfoBackEnd* backEnd = model->semanticInfoBackEnd();
432
backEnd->refreshAllTags();
433
TagModel* tagModel = TagModel::createAllTagsModel(this, backEnd);
435
QCompleter* completer = new QCompleter(d->mTagComboBox);
436
completer->setCaseSensitivity(Qt::CaseInsensitive);
437
completer->setModel(tagModel);
438
d->mTagComboBox->setCompleter(completer);
439
d->mTagComboBox->setInsertPolicy(QComboBox::NoInsert);
440
d->mTagComboBox->setEditable(true);
441
d->mTagComboBox->setModel(tagModel);
442
d->mTagComboBox->setCurrentIndex(-1);
444
connect(d->mTagComboBox, SIGNAL(currentIndexChanged(int)), SLOT(updateTagSetFilter()));
446
connect(d->mModeComboBox, SIGNAL(currentIndexChanged(int)), SLOT(updateTagSetFilter()));
448
QTimer::singleShot(0, d->mTagComboBox, SLOT(setFocus()));
451
TagFilterWidget::~TagFilterWidget()
457
void TagFilterWidget::updateTagSetFilter()
459
QModelIndex index = d->mTagComboBox->model()->index(d->mTagComboBox->currentIndex(), 0);
460
if (!index.isValid()) {
461
kWarning() << "Invalid index";
464
SemanticInfoTag tag = index.data(TagModel::TagRole).toString();
465
d->mFilter->setTag(tag);
467
bool wantMatchingTag = d->mModeComboBox->itemData(d->mModeComboBox->currentIndex()).toBool();
468
d->mFilter->setWantMatchingTag(wantMatchingTag);
457
473
* A container for all filter widgets. It features a close button on the right.
459
class FilterWidgetContainer : public QFrame {
475
class FilterWidgetContainer : public QFrame
461
FilterWidgetContainer() {
462
QPalette pal = palette();
463
pal.setColor(QPalette::Window, pal.color(QPalette::Highlight));
478
FilterWidgetContainer() {
479
QPalette pal = palette();
480
pal.setColor(QPalette::Window, pal.color(QPalette::Highlight));
467
void setFilterWidget(QWidget* widget) {
468
QToolButton* closeButton = new QToolButton;
469
closeButton->setIcon(KIcon("window-close"));
470
closeButton->setAutoRaise(true);
471
closeButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Minimum);
472
int size = IconSize(KIconLoader::Small);
473
closeButton->setIconSize(QSize(size, size));
474
connect(closeButton, SIGNAL(clicked()), SLOT(deleteLater()));
475
QHBoxLayout* layout = new QHBoxLayout(this);
476
layout->setMargin(2);
477
layout->setSpacing(2);
478
layout->addWidget(widget);
479
layout->addWidget(closeButton);
484
void setFilterWidget(QWidget* widget)
486
QToolButton* closeButton = new QToolButton;
487
closeButton->setIcon(KIcon("window-close"));
488
closeButton->setAutoRaise(true);
489
closeButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Minimum);
490
int size = IconSize(KIconLoader::Small);
491
closeButton->setIconSize(QSize(size, size));
492
connect(closeButton, SIGNAL(clicked()), SLOT(deleteLater()));
493
QHBoxLayout* layout = new QHBoxLayout(this);
494
layout->setMargin(2);
495
layout->setSpacing(2);
496
layout->addWidget(widget);
497
layout->addWidget(closeButton);
483
virtual void paintEvent(QPaintEvent*) {
484
QPainter painter(this);
485
painter.setRenderHint(QPainter::Antialiasing);
486
QPainterPath path = PaintUtils::roundedRectangle(QRectF(rect()).adjusted(0.5, 0.5, -0.5, -0.5), 6);
501
virtual void paintEvent(QPaintEvent*)
503
QPainter painter(this);
504
painter.setRenderHint(QPainter::Antialiasing);
505
QPainterPath path = PaintUtils::roundedRectangle(QRectF(rect()).adjusted(0.5, 0.5, -0.5, -0.5), 6);
488
QColor color = palette().color(QPalette::Highlight);
489
painter.fillPath(path, PaintUtils::alphaAdjustedF(color, 0.5));
490
painter.setPen(color);
491
painter.drawPath(path);
507
QColor color = palette().color(QPalette::Highlight);
508
painter.fillPath(path, PaintUtils::alphaAdjustedF(color, 0.5));
509
painter.setPen(color);
510
painter.drawPath(path);
496
514
struct FilterControllerPrivate {
497
FilterController* that;
499
SortedDirModel* mDirModel;
500
QList<QAction*> mActionList;
502
int mFilterWidgetCount; /**< How many filter widgets are in mFrame */
504
void addAction(const QString& text, const char* slot) {
505
QAction* action = new QAction(text, that);
506
QObject::connect(action, SIGNAL(triggered()), that, slot);
507
mActionList << action;
510
void addFilter(QWidget* widget) {
511
if (mFrame->isHidden()) {
514
FilterWidgetContainer* container = new FilterWidgetContainer;
515
container->setFilterWidget(widget);
516
mFrame->layout()->addWidget(container);
518
mFilterWidgetCount++;
519
QObject::connect(container, SIGNAL(destroyed()), that, SLOT(slotFilterWidgetClosed()));
517
SortedDirModel* mDirModel;
518
QList<QAction*> mActionList;
520
int mFilterWidgetCount; /**< How many filter widgets are in mFrame */
522
void addAction(const QString& text, const char* slot)
524
QAction* action = new QAction(text, q);
525
QObject::connect(action, SIGNAL(triggered()), q, slot);
526
mActionList << action;
529
void addFilter(QWidget* widget)
531
if (mFrame->isHidden()) {
534
FilterWidgetContainer* container = new FilterWidgetContainer;
535
container->setFilterWidget(widget);
536
mFrame->layout()->addWidget(container);
538
mFilterWidgetCount++;
539
QObject::connect(container, SIGNAL(destroyed()), q, SLOT(slotFilterWidgetClosed()));
524
543
FilterController::FilterController(QFrame* frame, SortedDirModel* dirModel)
526
, d(new FilterControllerPrivate) {
529
d->mDirModel = dirModel;
530
d->mFilterWidgetCount = 0;
533
FlowLayout* layout = new FlowLayout(d->mFrame);
534
layout->setSpacing(2);
536
d->addAction(i18nc("@action:inmenu", "Filter by Name"), SLOT(addFilterByName()));
537
d->addAction(i18nc("@action:inmenu", "Filter by Date"), SLOT(addFilterByDate()));
538
#ifndef GWENVIEW_SEMANTICINFO_BACKEND_NONE
539
#ifdef GWENVIEW_SEMANTICINFO_BACKEND_NEPOMUK
540
// Only add filters if Nepomuk is running
541
if (Nepomuk::ResourceManager::instance()->init() == 0) {
543
d->addAction(i18nc("@action:inmenu", "Filter by Rating"), SLOT(addFilterByRating()));
544
d->addAction(i18nc("@action:inmenu", "Filter by Tag"), SLOT(addFilterByTag()));
545
#ifdef GWENVIEW_SEMANTICINFO_BACKEND_NEPOMUK
552
FilterController::~FilterController() {
557
QList<QAction*> FilterController::actionList() const {
558
return d->mActionList;
562
void FilterController::addFilterByName() {
563
d->addFilter(new NameFilterWidget(d->mDirModel));
567
void FilterController::addFilterByDate() {
568
d->addFilter(new DateFilterWidget(d->mDirModel));
572
#ifndef GWENVIEW_SEMANTICINFO_BACKEND_NONE
573
void FilterController::addFilterByRating() {
574
d->addFilter(new RatingFilterWidget(d->mDirModel));
578
void FilterController::addFilterByTag() {
579
d->addFilter(new TagFilterWidget(d->mDirModel));
584
void FilterController::slotFilterWidgetClosed() {
585
d->mFilterWidgetCount--;
586
if (d->mFilterWidgetCount == 0) {
545
, d(new FilterControllerPrivate)
549
d->mDirModel = dirModel;
550
d->mFilterWidgetCount = 0;
553
FlowLayout* layout = new FlowLayout(d->mFrame);
554
layout->setSpacing(2);
556
d->addAction(i18nc("@action:inmenu", "Filter by Name"), SLOT(addFilterByName()));
557
d->addAction(i18nc("@action:inmenu", "Filter by Date"), SLOT(addFilterByDate()));
558
#ifndef GWENVIEW_SEMANTICINFO_BACKEND_NONE
559
#ifdef GWENVIEW_SEMANTICINFO_BACKEND_NEPOMUK
560
// Only add filters if Nepomuk is running
561
if (Nepomuk::ResourceManager::instance()->init() == 0) {
563
d->addAction(i18nc("@action:inmenu", "Filter by Rating"), SLOT(addFilterByRating()));
564
d->addAction(i18nc("@action:inmenu", "Filter by Tag"), SLOT(addFilterByTag()));
565
#ifdef GWENVIEW_SEMANTICINFO_BACKEND_NEPOMUK
571
FilterController::~FilterController()
576
QList<QAction*> FilterController::actionList() const
578
return d->mActionList;
581
void FilterController::addFilterByName()
583
d->addFilter(new NameFilterWidget(d->mDirModel));
586
void FilterController::addFilterByDate()
588
d->addFilter(new DateFilterWidget(d->mDirModel));
591
#ifndef GWENVIEW_SEMANTICINFO_BACKEND_NONE
592
void FilterController::addFilterByRating()
594
d->addFilter(new RatingFilterWidget(d->mDirModel));
597
void FilterController::addFilterByTag()
599
d->addFilter(new TagFilterWidget(d->mDirModel));
603
void FilterController::slotFilterWidgetClosed()
605
d->mFilterWidgetCount--;
606
if (d->mFilterWidgetCount == 0) {