SVN commit 738271 by cgilles:
digiKam from KDE3 branch : new text filter on status bar to filter current album contents based on item name, comments and tags strings. CCMAIL: [hidden email] BUG: 110136 CCBUGS: 139283 CCBUGS: 133191 M +1 -1 albumiconview.cpp M +37 -9 albumlister.cpp M +3 -1 albumlister.h M +14 -0 albumsettings.cpp M +3 -0 albumsettings.h M +21 -0 digikamapp.cpp M +1 -0 digikamapp.h M +4 -0 digikamappprivate.h --- branches/extragear/kde3/graphics/digikam/digikam/albumiconview.cpp #738270:738271 @@ -287,7 +287,7 @@ d->albumSettings = settings; - d->imageLister->setNameFilter(d->albumSettings->getAllFileFilter()); + d->imageLister->setNamesFilter(d->albumSettings->getAllFileFilter()); d->thumbSize = (ThumbnailSize::Size)d->albumSettings->getDefaultIconSize(); --- branches/extragear/kde3/graphics/digikam/digikam/albumlister.cpp #738270:738271 @@ -78,7 +78,7 @@ filterTimer = 0; job = 0; currAlbum = 0; - filter = "*"; + namesFilter = "*"; mimeTypeFilter = MimeFilter::AllFiles; ratingCond = AlbumLister::GreaterEqualCondition; matchingCond = AlbumLister::OrCondition; @@ -86,7 +86,8 @@ bool untaggedFilter; - QString filter; + QString namesFilter; + QString textFilter; QMap<Q_LLONG, ImageInfo*> itemMap; QMap<int,int> invalidatedItems; @@ -161,7 +162,7 @@ QDataStream ds(ba, IO_WriteOnly); ds << AlbumManager::instance()->getLibraryPath(); ds << album->kurl(); - ds << d->filter; + ds << d->namesFilter; ds << AlbumSettings::instance()->getIconShowResolution(); // Protocol = digikamalbums -> kio_digikamalbums @@ -199,7 +200,7 @@ QDataStream ds(ba, IO_WriteOnly); ds << AlbumManager::instance()->getLibraryPath(); ds << d->currAlbum->kurl(); - ds << d->filter; + ds << d->namesFilter; ds << AlbumSettings::instance()->getIconShowResolution(); d->job = new KIO::TransferJob(d->currAlbum->kurl(), KIO::CMD_SPECIAL, @@ -244,9 +245,15 @@ d->filterTimer->start(100, true); } +void AlbumLister::setTextFilter(const QString& text) +{ + d->textFilter = text; + d->filterTimer->start(100, true); +} + bool AlbumLister::matchesFilter(const ImageInfo* info) const { - if (d->dayFilter.isEmpty() && d->tagFilter.isEmpty() && + if (d->dayFilter.isEmpty() && d->tagFilter.isEmpty() && d->textFilter.isEmpty() && !d->untaggedFilter && d->ratingFilter==-1) return true; @@ -298,7 +305,8 @@ match &= d->dayFilter.contains(info->dateTime().date().day()); } - // Filter by rating. + //-- Filter by rating --------------------------------------------------------- + if (d->ratingFilter >= 0) { if (d->ratingCond == GreaterEqualCondition) @@ -327,7 +335,8 @@ } } - // Filter by mime type. + // -- Filter by mime type ----------------------------------------------------- + QFileInfo fi(info->filePath()); QString mimeType = fi.extension(false).upper(); @@ -377,6 +386,25 @@ break; } + //-- Filter by text ----------------------------------------------------------- + + AlbumSettings *settings = AlbumSettings::instance(); + if (settings->getIconShowName()) + { + if (info->name().contains(d->textFilter) == false) + match = false; + } + else if (settings->getIconShowComments()) + { + if (info->caption().contains(d->textFilter) == false) + match = false; + } + else if (settings->getIconShowTags()) + { + if (info->tagNames().contains(d->textFilter) == false) + match = false; + } + return match; } @@ -396,9 +424,9 @@ } } -void AlbumLister::setNameFilter(const QString& nameFilter) +void AlbumLister::setNamesFilter(const QString& namesFilter) { - d->filter = nameFilter; + d->namesFilter = namesFilter; } void AlbumLister::invalidateItem(const ImageInfo *item) --- branches/extragear/kde3/graphics/digikam/digikam/albumlister.h #738270:738271 @@ -99,7 +99,7 @@ */ void refresh(); - void setNameFilter(const QString& nameFilter); + void setNamesFilter(const QString& namesFilter); void setDayFilter(const QValueList<int>& days); @@ -109,6 +109,8 @@ void setRatingFilter(int rating, const RatingCondition& ratingCond); void setMimeTypeFilter(int mimeTypeFilter); + + void setTextFilter(const QString& text); /** * Trigger a recreation of the given ImageInfo object --- branches/extragear/kde3/graphics/digikam/digikam/albumsettings.cpp #738270:738271 @@ -115,6 +115,7 @@ QString defaultMovieFilefilter; QString defaultAudioFilefilter; QString defaultRawFilefilter; + QString textFilter; QString author; QString authorTitle; @@ -192,6 +193,7 @@ d->thumbnailSize = ThumbnailSize::Medium; d->treeThumbnailSize = 32; + d->textFilter = QString(); d->mimeTypeFilter = MimeFilter::AllFiles; d->ratingFilterValue = 0; @@ -278,6 +280,7 @@ d->treeThumbnailSize = config->readNumEntry("Default Tree Icon Size", ThumbnailSize::Tiny); d->currentTheme = config->readEntry("Theme", i18n("Default")); + d->textFilter = config->readEntry("Text Filter", QString()); d->mimeTypeFilter = config->readNumEntry("Mime Type Filter", MimeFilter::AllFiles); d->ratingFilterValue = config->readNumEntry("Rating Filter Value", 0); @@ -368,6 +371,7 @@ config->writeEntry("Raw File Filter", d->rawFilefilter); config->writeEntry("Default Icon Size", QString::number(d->thumbnailSize)); config->writeEntry("Default Tree Icon Size", QString::number(d->treeThumbnailSize)); + config->writeEntry("Text Filter", d->textFilter); config->writeEntry("Mime Type Filter", d->mimeTypeFilter); config->writeEntry("Rating Filter Value", d->ratingFilterValue); config->writeEntry("Rating Filter Condition", d->ratingFilterCond); @@ -605,6 +609,16 @@ return ((d->treeThumbnailSize < 8) || (d->treeThumbnailSize > 48)) ? 48 : d->treeThumbnailSize; } +void AlbumSettings::setTextFilter(const QString& text) +{ + d->textFilter = text; +} + +QString AlbumSettings::getTextFilter() const +{ + return d->textFilter; +} + void AlbumSettings::setMimeTypeFilter(int val) { d->mimeTypeFilter = val; --- branches/extragear/kde3/graphics/digikam/digikam/albumsettings.h #738270:738271 @@ -119,6 +119,9 @@ void setDefaultTreeIconSize(int val); int getDefaultTreeIconSize() const; + void setTextFilter(const QString& text); + QString getTextFilter() const; + void setMimeTypeFilter(int val); int getMimeTypeFilter() const; --- branches/extragear/kde3/graphics/digikam/digikam/digikamapp.cpp #738270:738271 @@ -29,12 +29,14 @@ #include <qlabel.h> #include <qstringlist.h> #include <qtooltip.h> +#include <qwhatsthis.h> #include <qsignalmapper.h> #include <qdockarea.h> #include <qhbox.h> // KDE includes. +#include <klineedit.h> #include <kaboutdata.h> #include <klocale.h> #include <kstandarddirs.h> @@ -196,6 +198,7 @@ if (d->view) delete d->view; + d->albumSettings->setTextFilter(d->statusTextFilterBar->text()); d->albumSettings->setMimeTypeFilter(d->statusMimeFilterBar->mimeFilter()); d->albumSettings->setRatingFilterCond(d->statusRatingFilterBar->ratingFilterCondition()); d->albumSettings->setRatingFilterValue(d->statusRatingFilterBar->rating()); @@ -362,6 +365,15 @@ //------------------------------------------------------------------------------ + d->statusTextFilterBar = new KLineEdit(statusBar()); + d->statusTextFilterBar->setMaximumHeight(fontMetrics().height()+2); + QToolTip::add(d->statusTextFilterBar, i18n("Text pattern filter")); + QWhatsThis::add(d->statusTextFilterBar, i18n("Set here the text pattern to filter albums contents " + "based on items name, comments, and tags")); + statusBar()->addWidget(d->statusTextFilterBar, 30, true); + + //------------------------------------------------------------------------------ + d->statusMimeFilterBar = new MimeFilter(statusBar()); d->statusMimeFilterBar->setMaximumHeight(fontMetrics().height()+2); statusBar()->addWidget(d->statusMimeFilterBar, 1, true); @@ -393,6 +405,9 @@ connect(d->statusMimeFilterBar, SIGNAL(activated(int)), this, SLOT(slotMimeTypeFilterChanged(int))); + connect(d->statusTextFilterBar, SIGNAL(textChanged(const QString&)), + this, SLOT(slotTextFilterChanged(const QString&))); + connect(d->statusZoomBar, SIGNAL(signalZoomMinusClicked()), d->view, SLOT(slotZoomOut())); @@ -1006,6 +1021,7 @@ d->albumSortAction->setCurrentItem((int)d->albumSettings->getAlbumSortOrder()); d->imageSortAction->setCurrentItem((int)d->albumSettings->getImageSortOrder()); + d->statusTextFilterBar->setText(d->albumSettings->getTextFilter()); d->statusMimeFilterBar->setMimeFilter(d->albumSettings->getMimeTypeFilter()); d->statusRatingFilterBar->setRating(d->albumSettings->getRatingFilterValue()); @@ -1931,6 +1947,11 @@ AlbumLister::instance()->setMimeTypeFilter(mimeTypeFilter); } +void DigikamApp::slotTextFilterChanged(const QString& text) +{ + AlbumLister::instance()->setTextFilter(text); +} + void DigikamApp::slotZoomSliderChanged(int size) { d->view->setThumbSize(size); --- branches/extragear/kde3/graphics/digikam/digikam/digikamapp.h #738270:738271 @@ -123,6 +123,7 @@ void slotDonateMoney(); void slotRatingFilterChanged(int, AlbumLister::RatingCondition); void slotMimeTypeFilterChanged(int); + void slotTextFilterChanged(const QString&); void slotAboutToShowForwardMenu(); void slotAboutToShowBackwardMenu(); --- branches/extragear/kde3/graphics/digikam/digikam/digikamappprivate.h #738270:738271 @@ -60,6 +60,7 @@ class KToggleAction; class KActionMenu; class KSelectAction; +class KLineEdit; namespace Digikam { @@ -139,6 +140,7 @@ statusProgressBar = 0; statusMimeFilterBar = 0; statusRatingFilterBar = 0; + statusTextFilterBar = 0; statusNavigateBar = 0; statusZoomBar = 0; kipiPluginLoader = 0; @@ -171,6 +173,8 @@ KConfig *config; + KLineEdit *statusTextFilterBar; + // Album Actions KAction *newAction; KAction *deleteAction; _______________________________________________ Digikam-devel mailing list [hidden email] https://mail.kde.org/mailman/listinfo/digikam-devel |
Free forum by Nabble | Edit this page |