7
7
* Description : a bar to filter album contents
9
* Copyright (C) 2007 by Gilles Caulier <caulier dot gilles at gmail dot com>
9
* Copyright (C) 2007-2008 by Gilles Caulier <caulier dot gilles at gmail dot com>
11
11
* This program is free software; you can redistribute it
12
12
* and/or modify it under the terms of the GNU General
13
13
* Public License as published by the Free Software Foundation;
14
14
* either version 2, or (at your option)
15
15
* any later version.
17
17
* This program is distributed in the hope that it will be useful,
18
18
* but WITHOUT ANY WARRANTY; without even the implied warranty of
19
19
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
68
72
d = new AlbumIconViewFilterPriv;
70
d->textFilter = new SearchTextBar(this);
74
d->led = new StatusLed(this);
75
d->led->installEventFilter(this);
76
d->led->setLedColor(StatusLed::Gray);
77
QWhatsThis::add(d->led, i18n("This LED indicates the global image filter status, "
78
"encompassing all status-bar filters and all tag filters from the right sidebar.\n\n"
79
"GRAY: no filter is active, all items are visible.\n"
80
"RED: filtering is on, but no items match.\n"
81
"GREEN: filter(s) matches at least one item.\n\n"
82
"Any mouse button click will reset all filters."));
84
d->textFilter = new SearchTextBar(this, "AlbumIconViewFilterTextFilter");
85
d->textFilter->setEnableTextQueryCompletion(true);
71
86
QToolTip::add(d->textFilter, i18n("Text quick filter (search)"));
72
QWhatsThis::add(d->textFilter, i18n("Here you can enter search patterns to quickly "
73
"filter this view on file names, captions "
74
"(comments), and tags"));
87
QWhatsThis::add(d->textFilter, i18n("Enter search patterns to quickly filter this view on file names, "
88
"captions (comments), and tags"));
76
90
d->mimeFilter = new MimeFilter(this);
77
91
d->ratingFilter = new RatingFilter(this);
79
93
setSpacing(KDialog::spacingHint());
91
105
connect(AlbumLister::instance(), SIGNAL(signalItemsTextFilterMatch(bool)),
92
106
d->textFilter, SLOT(slotSearchResult(bool)));
108
connect(AlbumLister::instance(), SIGNAL(signalItemsFilterMatch(bool)),
109
this, SLOT(slotItemsFilterMatch(bool)));
95
112
AlbumIconViewFilter::~AlbumIconViewFilter()
129
146
AlbumLister::instance()->setTextFilter(text);
149
void AlbumIconViewFilter::slotItemsFilterMatch(bool match)
151
QStringList filtersList;
154
if (!d->textFilter->text().isEmpty())
155
filtersList.append(i18n("<br><nobr><i>Text</i></nobr>"));
157
if (d->mimeFilter->mimeFilter() != MimeFilter::AllFiles)
158
filtersList.append(i18n("<br><nobr><i>Mime Type</i></nobr>"));
160
if (d->ratingFilter->rating() != 0)
161
filtersList.append(i18n("<br><nobr><i>Rating</i></nobr>"));
163
if (AlbumLister::instance()->tagFiltersIsActive())
164
filtersList.append(i18n("<br><nobr><i>Tags</i></nobr>"));
166
if (filtersList.count() > 1)
167
message = i18n("<nobr><b>Active filters:</b></nobr>");
169
message = i18n("<nobr><b>Active filter:</b></nobr>");
171
message.append(filtersList.join(QString()));
173
if (filtersList.isEmpty())
175
QToolTip::add(d->led, i18n("No active filter"));
176
d->led->setLedColor(StatusLed::Gray);
180
QToolTip::add(d->led, message);
181
d->led->setLedColor(match ? StatusLed::Green : StatusLed::Red);
185
bool AlbumIconViewFilter::eventFilter(QObject *object, QEvent *e)
187
QWidget *widget = static_cast<QWidget*>(object);
189
if (e->type() == QEvent::MouseButtonRelease)
191
QMouseEvent* event = static_cast<QMouseEvent*>(e);
192
if ( widget->rect().contains(event->pos()) && d->led->ledColor() != StatusLed::Gray)
194
// Reset all filters settings.
195
d->textFilter->setText(QString());
196
d->ratingFilter->setRating(0);
197
d->ratingFilter->setRatingFilterCondition(AlbumLister::GreaterEqualCondition);
198
d->mimeFilter->setMimeFilter(MimeFilter::AllFiles);
199
emit signalResetTagFilters();
132
206
} // namespace Digikam