From kde-commits Fri Apr 11 12:47:24 2008 From: Gilles Caulier Date: Fri, 11 Apr 2008 12:47:24 +0000 To: kde-commits Subject: extragear/graphics/digikam/utilities/kipiiface Message-Id: <1207918044.375717.32105.nullmailer () svn ! kde ! org> X-MARC-Message: https://marc.info/?l=kde-commits&m=120791805313794 SVN commit 795795 by cgilles: added search bar M +83 -4 kipiuploadwidget.cpp M +4 -0 kipiuploadwidget.h --- trunk/extragear/graphics/digikam/utilities/kipiiface/kipiuploadwidget.cpp #795794:795795 @@ -31,6 +31,7 @@ // KDE includes. #include +#include // Local includes. @@ -39,6 +40,7 @@ #include "album.h" #include "albumthumbnailloader.h" #include "treefolderitem.h" +#include "searchtextbar.h" #include "kipiinterface.h" #include "kipiimagecollection.h" #include "kipiuploadwidget.h" @@ -55,11 +57,14 @@ { albumsView = 0; iface = 0; + searchBar = 0; } QTreeWidget *albumsView; KipiInterface *iface; + + SearchTextBar *searchBar; }; KipiUploadWidget::KipiUploadWidget(KipiInterface* iface, QWidget *parent) @@ -74,11 +79,14 @@ d->albumsView->setAcceptDrops(false); d->albumsView->header()->hide(); - QHBoxLayout *hlay = new QHBoxLayout(this); - hlay->addWidget(d->albumsView); - hlay->setMargin(0); - hlay->setSpacing(0); + d->searchBar = new SearchTextBar(this, "KipiUploadWidgetSearchBar"); + QVBoxLayout *vlay = new QVBoxLayout(this); + vlay->addWidget(d->albumsView, 10); + vlay->addWidget(d->searchBar); + vlay->setMargin(0); + vlay->setSpacing(KDialog::spacingHint()); + // ------------------------------------------------------------------------------------ populateTreeView(AlbumManager::instance()->allPAlbums(), d->albumsView); @@ -87,6 +95,9 @@ connect(d->albumsView, SIGNAL(itemSelectionChanged()), this, SIGNAL(selectionChanged())); + + connect(d->searchBar, SIGNAL(textChanged(const QString&)), + this, SLOT(slotSearchTextChanged(const QString&))); } KipiUploadWidget::~KipiUploadWidget() @@ -152,4 +163,72 @@ return collection; } +void KipiUploadWidget::slotSearchTextChanged(const QString& filter) +{ + QString search = filter.toLower(); + + bool atleastOneMatch = false; + + AlbumList pList = AlbumManager::instance()->allPAlbums(); + for (AlbumList::iterator it = pList.begin(); it != pList.end(); ++it) + { + PAlbum* palbum = (PAlbum*)(*it); + + // don't touch the root Album + if (palbum->isRoot()) + continue; + + bool match = palbum->title().toLower().contains(search); + if (!match) + { + // check if any of the parents match the search + Album* parent = palbum->parent(); + while (parent && !parent->isRoot()) + { + if (parent->title().toLower().contains(search)) + { + match = true; + break; + } + + parent = parent->parent(); + } + } + + if (!match) + { + // check if any of the children match the search + AlbumIterator it(palbum); + while (it.current()) + { + if ((*it)->title().toLower().contains(search)) + { + match = true; + break; + } + ++it; + } + } + + TreeAlbumCheckListItem* viewItem = (TreeAlbumCheckListItem*) palbum->extraData(d->albumsView); + + if (match) + { + atleastOneMatch = true; + + if (viewItem) + viewItem->setHidden(false); + } + else + { + if (viewItem) + { + viewItem->setHidden(true); + } + } + } + + d->searchBar->slotSearchResult(atleastOneMatch); +} + } // namespace Digikam --- trunk/extragear/graphics/digikam/utilities/kipiiface/kipiuploadwidget.h #795794:795795 @@ -57,6 +57,10 @@ void populateTreeView(const AlbumList& aList, QTreeWidget *view); +private slots: + + void slotSearchTextChanged(const QString&); + private: KipiUploadWidgetPriv *d;