Assume that I haven't created an array like in the example, and that the items were added manually by someone, one at a time. Thanks!

Code: Select all
Dim f$(14)
f$(1)="Folder 1\File 11"
f$(2)="Folder 1\File 12"
f$(3)="Folder 1\File 13"
f$(4)="Folder 2\File 21"
f$(5)="Folder 2\File 22"
f$(6)="Folder 2\File 23"
f$(7)="Folder 3\File 31"
f$(8)="Folder 3\Sub-folder 3\File 331"
f$(9)="Folder 3\Sub-folder 3\File 332"
f$(10)="Folder 3\Sub-folder 3\File 333"
f$(11)="Folder 4\File 41"
f$(12)="Folder 4\Sub-folder 41\File 441"
f$(13)="Folder 4\Sub-folder 42\Sub-folder 421\File 4421"
f$(14)="Folder 4\File 42"
Procedure FillTreeGadget(Gadget, Array Files.s(1)) ; https://www.purebasic.fr/english/viewtopic.php?p=602949#p602949
Protected fn.s, currdir.s, idx, count, level, cnt
Dim lastdir.s(0)
count = ArraySize(Files())
For idx = 1 To count
fn = Files(idx)
cnt = CountString(fn, #PS$)
For level = 0 To cnt - 1
currdir = StringField(fn, level+1, #PS$)
If lastdir(level) <> currdir
AddGadgetItem(0, -1, currdir, 0, level)
lastdir(level) = currdir
ReDim lastdir(level+1)
EndIf
Next
fn = StringField(fn, level+1, #PS$)
AddGadgetItem(0, -1, fn, 0, level)
Next
Dim lastdir(0)
EndProcedure
If OpenWindow(0, 0, 0, 355, 400, "TreeGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
TreeGadget(0, 10, 10, 340, 380) ; TreeGadget standard
FillTreeGadget(0, f$())
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf