NAME=FolderDialog
AUTHOR=
ITEM=function FolderDialog$()
DESCRIPTION=Function creates a dialog, where the user can move through the folder tree and select one. Function returns an empty string if user presses cancel.
OUTSIDE CODE=dim info$(10, 10)  ' <- for FolderDialog$()
OUTSIDE CODE=dim FolderList$(10)  '<- for FolderDialog$()

function FolderDialog$(caption$)
    'caption$ - title of the dialog
    WindowWidth = 368
    WindowHeight = 360
    gosub [FolderDlgGetDrives]
    statictext #folderdlg, "Select folder:", 22, 16, 144, 20
    listbox #folderdlg.list, FolderList$(, [FolderDlgSelect], 22, 41, 312, 200
    button #folderdlg, "<<", [FolderDlgBack], UL, 302, 11, 32, 25
    button #folderdlg.default, "&Ok", [FolderDlgOk], UL, 150, 281, 88, 25
    button #folderdlg, "&Cancel", [FolderDlgCancel], UL, 246, 281, 88, 25
    textbox #folderdlg.text, 22, 246, 312, 25
    open caption$ for dialog_modal as #folderdlg
    print #folderdlg, "trapclose [FolderDlgCancel]"

    print #folderdlg, "font MS_Sans_Serif 10"
    wait

[FolderDlgSelect]
    #folderdlg.list, "selection? temp$"
    if temp$ <> "" then
        level = level+1
        folder$ = folder$; temp$; "\"
        #folderdlg.text, folder$
        gosub [FolderDlgGetDir]
        #folderdlg.list, "reload"
    end if
    wait


[FolderDlgBack]
    if level > 0 then
        level = level-1
        if level = 0 then
            folder$ = ""
            gosub [FolderDlgGetDrives]
            else
            i = len(folder$)-1
            while mid$(folder$, i, 1) <> "\" and mid$(folder$, i, 1) <> ""
                i = i-1
            wend
            folder$ = left$(folder$, i)
            gosub [FolderDlgGetDir]
        end if
        #folderdlg.text, folder$
        #folderdlg.list, "reload"
    end if
    wait

[FolderDlgGetDrives]
    c = 1
    while word$(Drives$, c) <> ""
        c = c+1
    wend
    redim FolderList$(c)
    for i = 1 to c
        FolderList$(i) = word$(Drives$, i)
    next i
    return

[FolderDlgGetDir]
    files folder$, info$(
    s = val(info$(0,0))
    t = val(info$(0,1))
    redim FolderList$(t)
    for i = 1 to t
        FolderList$(i) = info$(i+s, 1)
    next i
    return

[FolderDlgOk]
    #folderdlg.text, "!contents? FolderDialog$"
[FolderDlgCancel]
    close #folderdlg
end function
