# ----------------------------------------------------------------------------
# Macintosh-Like File selector
#
# Nicolas Roussel
# Oct, 1996
#
# mailto:roussel@lri.fr
# http://www-ihm.lri.fr/~roussel/
# ----------------------------------------------------------------------------

# ----------------------------------------------------------------------------
# Callbacks utilisees par le selecteur de fichier

# Procedure appelee pour remplir la liste de fichiers
proc FileOpen_Update {widget newpath} {
    catch {cd $newpath}

    $widget.files delete 0 end
    foreach f [lsort [glob -nocomplain *]] {
	$widget.files insert end $f
    }
}

# Procedure appelee pour terminer le dialogue
proc FileOpen_Done {widget} {
    destroy $widget	
}

# Procedure appelee lorsqu'on clique sur Open
proc FileOpen_Open {widget} {
    global FileOpen_Value

    set f [$widget.files get [$widget.files curselection]]
    puts [file join [pwd] $f]
    FileOpen_Done $widget
}

# ------------------------------------------------------------------------
# Cree une fenetre independante avec les differents elements necessaires
# pour la selection d'un fichier

# Cree la fenetre et lui donne un titre
toplevel .filesel
wm title .filesel "File opener ..."

# Cree la listbox destinée à contenir les noms de fichier
listbox .filesel.files  -selectmode single
pack .filesel.files -side left -fill both -expand 1 -padx 5 -pady 5

# Cree les boutons Open et Cancel
button .filesel.open -text Open -command "FileOpen_Open .filesel" -width 8
button .filesel.cancel -text Cancel -command "FileOpen_Done .filesel" -width 8
pack .filesel.open .filesel.cancel -side bottom -fill y -padx 5 -pady 5

# Initialise la liste de fichiers avec le répertoire courant
FileOpen_Update .filesel [pwd]
