diff --git a/sources/elementspanel.cpp b/sources/elementspanel.cpp index 9e88c889b..5308f3410 100644 --- a/sources/elementspanel.cpp +++ b/sources/elementspanel.cpp @@ -507,6 +507,20 @@ bool ElementsPanel::matchesCurrentFilter(const QTreeWidgetItem *item) const { return(item_matches); } +/** + @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 @@ -818,14 +832,38 @@ bool ElementsPanel::scrollToElement(const ElementsLocation &location) { return(true); } +/** + 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 &items) { if (filter_.isEmpty()) return; + buildFilterList(); QList 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); } diff --git a/sources/elementspanel.h b/sources/elementspanel.h index 102a14695..fbb365616 100644 --- a/sources/elementspanel.h +++ b/sources/elementspanel.h @@ -83,6 +83,7 @@ class ElementsPanel : public GenericPanel { void projectWasOpened(QETProject *); void projectWasClosed(QETProject *); bool scrollToElement(const ElementsLocation &); + void buildFilterList(); void applyCurrentFilter(const QList &); void ensureHierarchyIsVisible(const QList &); void scrollToSelectedItem(); @@ -96,6 +97,7 @@ class ElementsPanel : public GenericPanel { 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 @@ class ElementsPanel : public GenericPanel { 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