diff options
author | Michele Calgaro <michele.calgaro@yahoo.it> | 2024-10-13 11:56:14 +0900 |
---|---|---|
committer | Michele Calgaro <michele.calgaro@yahoo.it> | 2024-10-29 21:58:42 +0900 |
commit | 2879ff70be9271550477982a1a6371714db38562 (patch) | |
tree | c2054149dba923ab080fe7093432c7663a990111 /src/recipefilter.cpp | |
parent | 3eb38d2556f676d1027746f20bf12a1dd74451ef (diff) | |
download | krecipes-2879ff70.tar.gz krecipes-2879ff70.zip |
Rearrange folders structure to remove unnecessary 'krecipes' second level subfolder
Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it>
(cherry picked from commit 0c8ed6c9a4000af8f48581a81c4b5c2f5b9fd502)
Diffstat (limited to 'src/recipefilter.cpp')
-rw-r--r-- | src/recipefilter.cpp | 154 |
1 files changed, 154 insertions, 0 deletions
diff --git a/src/recipefilter.cpp b/src/recipefilter.cpp new file mode 100644 index 0000000..fc8d8ee --- /dev/null +++ b/src/recipefilter.cpp @@ -0,0 +1,154 @@ +/*************************************************************************** +* Copyright (C) 2004 by * +* Jason Kivlighn (jkivlighn@gmail.com) * +* Unai Garro (ugarro@users.sourceforge.net) * +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 2 of the License, or * +* (at your option) any later version. * +***************************************************************************/ + +#include "recipefilter.h" + +#include <kdebug.h> + +#include "widgets/recipelistview.h" + +RecipeFilter::RecipeFilter( TDEListView *klv ) : TQObject( klv ), + listview( klv ), + currentCategory( 0 ) +{} + +void RecipeFilter::filter( const TQString &s ) +{ + //do this to only iterate over children of 'currentCategory' + TQListViewItem * pEndItem = NULL; + if ( currentCategory ) { + TQListViewItem * pStartItem = currentCategory; + do { + if ( pStartItem->nextSibling() ) + pEndItem = pStartItem->nextSibling(); + else + pStartItem = pStartItem->parent(); + } + while ( pStartItem && !pEndItem ); + } + + //Re-show everything + TQListViewItemIterator list_it; + if ( currentCategory ) + list_it = TQListViewItemIterator( currentCategory ); + else + list_it = TQListViewItemIterator( listview ); + while ( list_it.current() != pEndItem ) { + list_it.current() ->setVisible( true ); + list_it++; + } + + // Only filter if the filter text isn't empty + if ( !s.isEmpty() ) { + TQListViewItemIterator list_it( listview ); + while ( TQListViewItem * it = list_it.current() ) { + if ( it->rtti() == 1000 ) // Its a recipe + { + RecipeListItem * recipe_it = ( RecipeListItem* ) it; + + if ( recipe_it->title().contains( s, false ) ) + { + if ( currentCategory ) { + if ( isParentOf( currentCategory, recipe_it ) ) + recipe_it->setVisible( true ); + else + recipe_it->setVisible( false ); + } + else + recipe_it->setVisible( true ); + } + else + recipe_it->setVisible( false ); + } + + ++list_it; + } + hideIfEmpty(); + } +} + +void RecipeFilter::filterCategory( int categoryID ) +{ + kdDebug() << "I got category :" << categoryID << "\n"; + + if ( categoryID == -1 ) + currentCategory = 0; + else { + TQListViewItemIterator list_it( listview ); + while ( TQListViewItem * it = list_it.current() ) { + if ( it->rtti() == 1001 ) { + CategoryListItem * cat_it = ( CategoryListItem* ) it; + if ( cat_it->categoryId() == categoryID ) { + currentCategory = cat_it; + break; + } + } + + ++list_it; + } + } + + TQListViewItemIterator list_it( listview ); + while ( TQListViewItem * it = list_it.current() ) { + if ( categoryID == -1 ) + it->setVisible( true ); // We're not filtering categories + else if ( it == currentCategory || isParentOf( it, currentCategory ) || isParentOf( currentCategory, it ) ) + it->setVisible( true ); + else + it->setVisible( false ); + + ++list_it; + } + + if ( currentCategory ) + currentCategory->setOpen( true ); +} + +bool RecipeFilter::hideIfEmpty( TQListViewItem *parent ) +{ + TQListViewItem * it; + if ( parent == 0 ) + it = listview->firstChild(); + else + it = parent->firstChild(); + + bool parent_should_show = false; + for ( ; it; it = it->nextSibling() ) { + if ( (it->rtti() == 1000 && it->isVisible()) || (it->rtti() == NEXTLISTITEM_RTTI || it->rtti() == PREVLISTITEM_RTTI) ) { + parent_should_show = true; + } + else { + bool result = hideIfEmpty( it ); + if ( parent_should_show == false ) + parent_should_show = result; + } + } + + if ( parent && parent->rtti() != 1000 ) { + if ( parent_should_show ) + parent->setOpen( true ); + parent->setVisible( parent_should_show ); + } + return parent_should_show; +} + +bool RecipeFilter::isParentOf( TQListViewItem *parent, TQListViewItem *to_check ) +{ + for ( TQListViewItem * it = to_check->parent(); it; it = it->parent() ) { + if ( it == parent ) + return true; + } + + return false; +} + +#include "recipefilter.moc" + |