#include "CtrlLib/CtrlLib.h"

using namespace Upp;

struct App : TopWindow {
    OptionTree   tree;

    typedef App CLASSNAME;

    void OpenDir(int id) {
        String path = tree.GetLabel(id);

        for(FindFile ff(AppendFileName(path, "*.*")); ff; ff.Next()) {
            String n = ff.GetName();

            if(n != "." && n != ".." && ff.IsFolder()) {
                int childId = tree.Add(id, AppendFileName(path, n));
                tree.SetNode(childId, tree.GetNode(childId).CanOpen(true));
            }
        }
    }

    void CloseDir(int id) {
        tree.RemoveChildren(id);
    }

    App() {
        Add(tree.SizePos());

        tree.WhenOpen = THISBACK(OpenDir);
        tree.WhenClose = THISBACK(CloseDir);

    #ifdef PLATFORM_WIN32
        String dir = String(GetExeFilePath()[0], 1) + ":\\";
    #else
        String dir = "/usr";
    #endif

        tree.SetRoot(dir);
        tree.Set(0, dir);

        Sizeable();
    }
};

GUI_APP_MAIN
{
    App().Run();
}
