[qet] [3378] Modification du filtre : recherche sur plusieur mot ( sepration caractere +)

[ Thread Index | Date Index | More lists.tuxfamily.org/qet Archives ]


Revision: 3378
Author:   runsys
Date:     2014-10-16 22:35:32 +0200 (Thu, 16 Oct 2014)
Log Message:
-----------
Modification du filtre : recherche sur plusieur mot (sepration caractere +)

Modified Paths:
--------------
    trunk/sources/elementspanel.cpp
    trunk/sources/elementspanel.h

Modified: trunk/sources/elementspanel.cpp
===================================================================
--- trunk/sources/elementspanel.cpp	2014-10-16 18:39:43 UTC (rev 3377)
+++ trunk/sources/elementspanel.cpp	2014-10-16 20:35:32 UTC (rev 3378)
@@ -508,6 +508,20 @@
 }
 
 /**
+	@return true if \a item matches the  filter, false otherwise
+*/
+bool ElementsPanel::matchesFilter(const QTreeWidgetItem *item, QString filter) const {
+	if (!item) return(false);
+	
+	// no filter => we consider the item matches
+	if (filter.isEmpty()) return(true);
+	
+	bool item_matches = item -> text(0).contains(filter, Qt::CaseInsensitive);
+	
+	return(item_matches);
+}
+
+/**
 	Reloads the following collections:
 	  * common collection
 	  * custom collection
@@ -819,13 +833,37 @@
 }
 
 /**
+	Build filter list for multiple filter
+*/
+void ElementsPanel::buildFilterList() {
+	if (filter_.isEmpty()) return;
+	filter_list_ = filter_.split( '+' );
+	/*
+	qDebug() << "*******************";
+	foreach( QString filter , filter_list_ )	{
+		filter = filter.trimmed();
+		qDebug() << filter;
+	}
+	*/
+}
+
+/**
 	Apply the current filter to a given item.
 */
 void ElementsPanel::applyCurrentFilter(const QList<QTreeWidgetItem *> &items) {
 	if (filter_.isEmpty()) return;
+	buildFilterList();
 	QList<QTreeWidgetItem *> matching_items;
+
 	foreach (QTreeWidgetItem *item, items) {
-		bool item_matches = matchesCurrentFilter(item);
+		bool item_matches = true;
+
+		foreach( QString filter , filter_list_ )	{
+			filter = filter.trimmed();
+			if ( !filter.isEmpty() )	{
+				item_matches &= matchesFilter(item, filter);
+			}
+		}
 		if (item_matches) matching_items << item;
 		item -> setHidden(!item_matches);
 	}

Modified: trunk/sources/elementspanel.h
===================================================================
--- trunk/sources/elementspanel.h	2014-10-16 18:39:43 UTC (rev 3377)
+++ trunk/sources/elementspanel.h	2014-10-16 20:35:32 UTC (rev 3378)
@@ -83,6 +83,7 @@
 	void projectWasOpened(QETProject *);
 	void projectWasClosed(QETProject *);
 	bool scrollToElement(const ElementsLocation &);
+	void buildFilterList();
 	void applyCurrentFilter(const QList<QTreeWidgetItem *> &);
 	void ensureHierarchyIsVisible(const QList<QTreeWidgetItem *> &);
 	void scrollToSelectedItem();
@@ -96,6 +97,7 @@
 	void startElementDrag(const ElementsLocation &);
 	void startTitleBlockTemplateDrag(const TitleBlockTemplateLocation &);
 	bool matchesCurrentFilter(const QTreeWidgetItem *) const;
+	bool matchesFilter(const QTreeWidgetItem *, QString) const;
 	
 	protected slots:
 	void firstActivation();
@@ -121,6 +123,7 @@
 	int loading_progress_;                         ///< used to track the loading progress of elements collections
 	bool first_reload_;                            ///< used to distinguish the first time this panel is reloaded
 	QString filter_;                               ///< Currently applied filter
+	QStringList filter_list_;                       ///< Currently applied list of filter
 	QTreeWidgetItem *it_prev_, *it_;
 };
 #endif


Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/