# How to create a dynamic UI-list similar to the outliner

I'm currently trying to create sort of a "navigation" UI list with the parent/child concept like the outliner or any classic folder navigation. But I'm stuck at the part where I need my items to be dynamically hidden.

the problem is that this kind (if close: return) of code won't actually hide the drawing of an element, as the element will still be drawn

class EXAMPLE_UL_folder_navigation(bpy.types.UIList):

def draw_item(self, context, layout, data, item, icon, active_data, active_propname):

if not item:
return

wm = bpy.context.window_manager
return
#Element will still be drawn, in an empty row

#draw the row
row = layout.row(align=True)

row.separator(factor=item.level*2)

row.prop(item,"is_open",icon="TRIA_DOWN" if item.is_open else "TRIA_RIGHT", icon_only=True, emboss=False)

row.label(text=os.path.basename(item.name))



In my code I try to re-create folders structure, here's a sample of how I get the structure

Mapping = []

def recur_dir_mapping(path, level=0, parent=""):

global Mapping

Mapping.append({
"is_folder":True,
"name":os.path.basename(path),
"path":path,
"level": level if (level==0) else level-1,
"parent":parent,
})

for p in os.listdir(path): #order of list generated by listdir is important..
p = os.path.join(path,p)

if os.path.isfile(p):

Mapping.append({
"is_folder":False,
"name":os.path.basename(p),
"path":p,
"level":level,
"parent":path,
})

elif os.path.isdir(p):
recur_dir_mapping(p, level=level+1, parent=path)

return None


and then how I create my UI list

        for i in range(len(collection_prop)):
collection_prop.remove(0)

recur_dir_mapping( mypath )
global Mapping

for element in Mapping:

#library navigation = every folder & files
e.name      = element["name"]
e.path      = element["path"]
e.parent    = element["parent"]
e.is_folder = element["is_folder"]

#Reset Mapping
Mapping = []



But this is the easy part, the hard part is to truly "hide" elements dynamically, such as suggested in the gif above similar to the outliner

I'm sure this has been done many times in the past right? Maybe UI lists aren't a wise choice for such dynamic drawing