docs: def filterItems(self, 
                      terms, 
                      caseSensitive=False):
          """
          Filters the items in this tree based on the inputed text.
          
          :param      terms           | <str> || {<str> datatype: [<str> opt, ..]}
                      caseSensitive   | <bool>
          """
          # create a dictionary of options
          if type(terms) != dict:
              terms = {'*': nativestring(terms)}
          
          # validate the "all search"
          if '*' in terms and type(terms['*']) != list:
              sterms = nativestring(terms['*'])
              
              if not sterms.strip():
                  terms.pop('*')
              else:
                  dtype_matches = DATATYPE_FILTER_EXPR.findall(sterms)
                  
                  # generate the filter for each data type
                  for match, dtype, values in dtype_matches:
                      sterms = sterms.replace(match, '')
                      terms.setdefault(dtype, [])
                      terms[dtype] += values.split(',')
                  
                  keywords = sterms.replace(',', '').split()
                  while '' in keywords:
                      keywords.remove('')
                  
                  terms['*'] = keywords
          
          # filter out any data types that are not being searched
          filtered_dtypes = self.filteredDataTypes()
          filter_terms = {}
          for dtype, keywords in terms.items():
              if dtype != '*' and not dtype in filtered_dtypes:
                  continue
              
              if not caseSensitive:
                  keywords = [nativestring(keyword).lower() for keyword in keywords]
              else:
                  keywords = map(nativestring, keywords)
              
              filter_terms[dtype] = keywords
          
          self.__filterItems(filter_terms, caseSensitive)