Added support to filter in instead of only out
authorXabier Rodriguez Calvar <calvaris@igalia.com>
Fri, 18 Mar 2016 09:42:18 +0000 (10:42 +0100)
committerStefan Sauer <ensonic@users.sf.net>
Mon, 4 Apr 2016 20:28:15 +0000 (22:28 +0200)
Added support to filter a log level and all above it

https://bugzilla.gnome.org/show_bug.cgi?id=763857

debug-viewer/GstDebugViewer/GUI/filters.py

index 8367e0e..5f59065 100644 (file)
 
 from GstDebugViewer.GUI.models import LogModelBase
 
+def get_comparison_function (all_but_this):
+
+    if (all_but_this):
+        return lambda x, y : x == y
+    else:
+        return lambda x, y : x != y
+
 class Filter (object):
 
     pass
 
 class DebugLevelFilter (Filter):
 
-    def __init__ (self, debug_level):
+    only_this, all_but_this, this_and_above = range(3)
+
+    def __init__ (self, debug_level, mode = 0):
 
         col_id = LogModelBase.COL_LEVEL
+        if mode == self.this_and_above:
+            comparison_function = lambda x, y : x < y
+        else:
+            comparison_function = get_comparison_function (mode == self.all_but_this)
         def filter_func (row):
-            return row[col_id] != debug_level
+            return comparison_function (row[col_id], debug_level)
         self.filter_func = filter_func
 
 class CategoryFilter (Filter):
 
-    def __init__ (self, category):
+    def __init__ (self, category, all_but_this = False):
 
         col_id = LogModelBase.COL_CATEGORY
+        comparison_function = get_comparison_function (all_but_this)
         def category_filter_func (row):
-            return row[col_id] != category
+            return comparison_function(row[col_id], category)
         self.filter_func = category_filter_func
 
 class ObjectFilter (Filter):
 
-    def __init__ (self, object_):
+    def __init__ (self, object_, all_but_this = False):
 
         col_id = LogModelBase.COL_OBJECT
+        comparison_function = get_comparison_function (all_but_this)
         def object_filter_func (row):
-            return row[col_id] != object_
+            return comparison_function (row[col_id], object_)
         self.filter_func = object_filter_func
 
 class FilenameFilter (Filter):
 
-    def __init__ (self, filename):
+    def __init__ (self, filename, all_but_this = False):
 
         col_id = LogModelBase.COL_FILENAME
+        comparison_function = get_comparison_function (all_but_this)
         def filename_filter_func (row):
-            return row[col_id] != filename
+            return comparison_function (row[col_id], filename)
         self.filter_func = filename_filter_func