summaryrefslogtreecommitdiffstats
path: root/src/recipefilter.cpp
diff options
context:
space:
mode:
authorMichele Calgaro <michele.calgaro@yahoo.it>2024-10-13 11:56:14 +0900
committerMichele Calgaro <michele.calgaro@yahoo.it>2024-10-29 21:58:42 +0900
commit2879ff70be9271550477982a1a6371714db38562 (patch)
treec2054149dba923ab080fe7093432c7663a990111 /src/recipefilter.cpp
parent3eb38d2556f676d1027746f20bf12a1dd74451ef (diff)
downloadkrecipes-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.cpp154
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"
+