# demo using different icons in tree widget
#
# 17-AUG-01 created
# 16-OCT-01 MIME-encoded icons so you don't need separate files

import os
import Tree
from Tkinter import *

def getfiles(node):
    path=apply(os.path.join, node.full_id())
    for filename in os.listdir(path):
        full=os.path.join(path, filename)
        name=filename
        folder=0
        icon=regr_icon
        if os.path.isdir(full):
            # it's a directory
            folder=1
        elif not os.path.isfile(full):
            # but it's not a file
            icon=spec_icon
            
        if os.path.islink(full):
            # it's a link
            name=name+' ('+os.readlink(full)+')'
            icon=link_icon
            
        if folder:
            # it's a collapsed directory
            t.add_node(name=name, id=filename, flag=1,
                       collapsed_icon=shut_icon, expanded_icon=open_icon)
        else:
            # it's not!!
            t.add_node(name=name, id=filename, collapsed_icon=icon)

root=Tk()
root.title(os.path.basename(sys.argv[0]))

# create our icons (must be done AFTER Tkinter is initialized)
shut_icon=PhotoImage(data='R0lGODlhCQAQAJH/AMDAwAAAAGnD/wAAACH5BAEAAAAALAAA'
                     'AAAJABAAQAIdhI8hu2EqXIroyQrb\nyRf0VG0UxnSZ5jFjulrhaxQ'
                     'AO6olVwAAOw==')
open_icon=PhotoImage(data='R0lGODlhEAAJAJH/AMDAwAAAAGnD/wAAACH5BAEAAAAALAAA'
                     'AAAQAAkAQAIahI+pyyEPg3KwPrko\nTqH7/yGUJWxcZTapUQAAO8b'
                     'yUgAAOw==')
regr_icon=PhotoImage(data='R0lGODlhCwAOAJEAAAAAAICAgP///8DAwCH5BAEAAAMALAAA'
                     'AAALAA4AAAIphA+jA+JuVgtUtMQe\nPJlWCgSN9oSTV5lkKQpo2q5'
                     'W+wbzuJrIHgw1WgAAOw==')
link_icon=PhotoImage(data='R0lGODlhCwAOAJH/AAAAAICAgBL/AMDAwCH5BAEAAAMALAAA'
                     'AAALAA4AQAIphA+jAxIPBQgNBkcp\n2hTfljBeNFXW1wmqFIora7i'
                     'vWs5rbUupPQ3nWQAAOw==')
spec_icon=PhotoImage(data='R0lGODlhCwAOAJH/AAAAAICAgP8AAMDAwCH5BAEAAAMALAAA'
                     'AAALAA4AQAIphA+jAxIPBQgNBkcp\n2hTfljBeNFXW1wmqFIora7i'
                     'vWs5rbUupPQ3nWQAAOw==')

# create the control
t=Tree.Tree(master=root,
            get_contents_callback=getfiles,
            root_id=os.sep,
            root_label=os.sep,
            line_flag=0,
            collapsed_icon=shut_icon,
            expanded_icon=open_icon,
            width=300)
t.grid(row=0, column=0, sticky='nsew')

root.grid_rowconfigure(0, weight=1)
root.grid_columnconfigure(0, weight=1)

sb=Scrollbar(root)
sb.grid(row=0, column=1, sticky='ns')
t.configure(yscrollcommand=sb.set)
sb.configure(command=t.yview)
sb=Scrollbar(root, orient=HORIZONTAL)

sb.grid(row=1, column=0, sticky='ew')
t.configure(xscrollcommand=sb.set)
sb.configure(command=t.xview)

t.focus_set()
t.root.expand()

root.mainloop()
