Index: /trunk/src/VBox/Frontends/VirtualBox/src/extensions/QITreeWidget.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/extensions/QITreeWidget.cpp	(revision 76996)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/extensions/QITreeWidget.cpp	(revision 76997)
@@ -438,4 +438,26 @@
 }
 
+QList<QTreeWidgetItem*> QITreeWidget::filterItems(const QITreeWidgetItemFilter &filter, QTreeWidgetItem* pParent /* = 0 */)
+{
+    QList<QTreeWidgetItem*> filteredItemList;
+    if (!pParent)
+        filterItemsInternal(filter, invisibleRootItem(), filteredItemList);
+    else
+        filterItemsInternal(filter, pParent, filteredItemList);
+    return filteredItemList;
+}
+
+void QITreeWidget::filterItemsInternal(const QITreeWidgetItemFilter &filter,
+                                           QTreeWidgetItem* pParent, QList<QTreeWidgetItem*> &filteredItemList)
+{
+    if (!pParent)
+        return;
+    if (filter(pParent))
+        filteredItemList.append(pParent);
+
+    for (int i = 0; i < pParent->childCount(); ++i)
+        filterItemsInternal(filter, pParent->child(i), filteredItemList);
+}
+
 void QITreeWidget::paintEvent(QPaintEvent *pEvent)
 {
Index: /trunk/src/VBox/Frontends/VirtualBox/src/extensions/QITreeWidget.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/extensions/QITreeWidget.h	(revision 76996)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/extensions/QITreeWidget.h	(revision 76997)
@@ -32,4 +32,14 @@
 class QITreeWidget;
 
+/** A functor base to be passed to QITabWidget::filterItems(..). Overload operator()(..) to filter out
+ *  tree items. */
+class SHARED_LIBRARY_STUFF QITreeWidgetItemFilter
+{
+ public:
+    virtual bool operator()(QTreeWidgetItem*) const
+    {
+        return true;
+    }
+};
 
 /** QTreeWidgetItem subclass extending standard functionality. */
@@ -99,4 +109,7 @@
     QITreeWidgetItem *childItem(int iIndex) const;
     QModelIndex itemIndex(QTreeWidgetItem *pItem);
+    /** Recurses thru the subtree with a root pParent and returns a list of tree items filtered by @a filter.
+     *  When @a pParent is null than QTreeWidget::invisibleRootItem() is used as the root item. */
+    QList<QTreeWidgetItem*> filterItems(const QITreeWidgetItemFilter &filter, QTreeWidgetItem* pParent = 0);
 
 protected:
@@ -106,4 +119,10 @@
     /** Handles resize @a pEvent. */
     void resizeEvent(QResizeEvent *pEvent);
+
+ private:
+
+    /* Recurses thru the tree and append filtered items to @a filteredItemList. */
+    void filterItemsInternal(const QITreeWidgetItemFilter &filter, QTreeWidgetItem* pParent,
+                             QList<QTreeWidgetItem*> &filteredItemList);
 };
 
