[ Avaa Bypassed ]




Upload:

Command:

hmhc3928@3.142.212.225: ~ $
# -*- mode: TCL; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
#
#	$Id: EFileBox.tcl,v 1.5 2004/03/28 02:44:57 hobbs Exp $
#
# EFileBox.tcl --
#
#	Implements the Extended File Selection Box widget.
#
# Copyright (c) 1993-1999 Ioi Kim Lam.
# Copyright (c) 2000-2001 Tix Project Group.
# Copyright (c) 2004 ActiveState
#
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#


#
# ToDo
#   (1)	If user has entered an invalid directory, give an error dialog
#

tixWidgetClass tixExFileSelectBox {
    -classname TixExFileSelectBox
    -superclass tixPrimitive
    -method {
	filter invoke
    }
    -flag {
	-browsecmd -command -dialog -dir -dircmd -directory 
	-disablecallback -filetypes -pattern -selection -showhidden -value
    }
    -forcecall {
	-filetypes
    }
    -configspec {
	{-browsecmd browseCmd BrowseCmd ""}
	{-command command Command ""}
	{-dialog dialog Dialog ""}
	{-dircmd dirCmd DirCmd ""}
	{-directory directory Directory ""}
	{-disablecallback disableCallback DisableCallback 0 tixVerifyBoolean}
	{-filetypes fileTypes FileTypes ""}
	{-pattern pattern Pattern *}
	{-showhidden showHidden ShowHidden 0 tixVerifyBoolean}
	{-value value Value ""}
    }
    -alias {
	{-dir -directory}
	{-selection -value}
    }

    -default {
	{*dir.label 			{Directories:}}
	{*dir.editable 			true}
	{*dir.history 			true}
	{*dir*listbox.height 		5}
	{*file.label  			Files:}
	{*file.editable 		true}
	{*file.history 			false}
	{*file*listbox.height 		5}
	{*types.label 			{List Files of Type:}}
	{*types*listbox.height 		3}
	{*TixComboBox.labelSide 	top}
	{*TixComboBox*Label.anchor 	w}
	{*dir.label.underline 		0}
	{*file.label.underline		0}
	{*types.label.underline 	14}
	{*TixComboBox.anchor 		e}
	{*TixHList.height 		7}
	{*filelist*listbox.height 	7}
	{*hidden.wrapLength 		3c}
	{*hidden.justify 		left}
    }
}

proc tixExFileSelectBox:InitWidgetRec {w} {
    upvar #0 $w data
    global env

    tixChainMethod $w InitWidgetRec

    if {$data(-directory) eq ""} {
	set data(-directory) [pwd]
    }
    set data(oldDir)    ""
    set data(flag)      0
}


#----------------------------------------------------------------------
#		Construct widget
#----------------------------------------------------------------------
proc tixExFileSelectBox:ConstructWidget {w} {
    upvar #0 $w data

    tixChainMethod $w ConstructWidget

    # listbox frame
    set lf [frame $w.lf]

    # The pane that contains the two listboxes
    #
    set pane  [tixPanedWindow $lf.pane -orientation horizontal]
    set dpane [$pane add 1 -size 160]
    set fpane [$pane add 2 -size 160]

    $dpane config -relief flat
    $fpane config -relief flat

    # The File List Pane
    #
    set data(w:file)  [tixComboBox $fpane.file\
			   -command [list tixExFileSelectBox:Cmd-FileCombo $w]\
			   -prunehistory true \
			   -options {
			       label.anchor w
			   }]
    set data(w:filelist) \
	[tixScrolledListBox $fpane.filelist \
	     -command   [list tixExFileSelectBox:Cmd-FileList $w 1] \
	     -browsecmd [list tixExFileSelectBox:Cmd-FileList $w 0]]
    pack $data(w:file)  -padx 8 -pady 4 -side top -fill x
    pack $data(w:filelist) -padx 8 -pady 4 -side top -fill both -expand yes

    # The Directory Pane
    #
    set data(w:dir)   [tixComboBox $dpane.dir \
			   -command [list tixExFileSelectBox:Cmd-DirCombo $w]\
			   -prunehistory true \
			   -options {
			       label.anchor w
			   }]
    set data(w:dirlist) \
	[tixDirList  $dpane.dirlist \
	     -command   [list tixExFileSelectBox:Cmd-DirList $w]\
	     -browsecmd [list tixExFileSelectBox:Browse-DirList $w]]
    pack $data(w:dir)   -padx 8 -pady 4 -side top -fill x
    pack $data(w:dirlist) -padx 8 -pady 4 -side top -fill both -expand yes

    # The file types listbox
    #
    set data(w:types) [tixComboBox $lf.types\
			   -command [list tixExFileSelectBox:Cmd-TypeCombo $w]\
			   -options {
			       label.anchor w
			   }]

    pack $data(w:types)  -padx 12 -pady 4 -side bottom -fill x -anchor w
    pack $pane -side top -padx 4 -pady 4 -expand yes -fill both

    # Buttons to the right
    #
    set bf [frame $w.bf]
    set data(w:ok)     [button $bf.ok -text Ok -width 6 \
	-underline 0 -command [list tixExFileSelectBox:Ok $w]]
    set data(w:cancel) [button $bf.cancel -text Cancel -width 6 \
	-underline 0 -command [list tixExFileSelectBox:Cancel $w]]
    set data(w:hidden) [checkbutton $bf.hidden -text "Show Hidden Files"\
	-underline 0\
       	-variable [format %s(-showhidden) $w] -onvalue 1 -offvalue 0\
	-command [list tixExFileSelectBox:SetShowHidden $w]]

    pack $data(w:ok) $data(w:cancel) $data(w:hidden)\
	-side top -fill x -padx 6 -pady 3

    pack $bf -side right -fill y -pady 6
    pack $lf -side left -expand yes -fill both

    tixDoWhenMapped $w [list tixExFileSelectBox:Map $w]

    if {$data(-filetypes) == ""} {
	$data(w:types) config -state disabled
    }
}


#----------------------------------------------------------------------
# Configuration
#----------------------------------------------------------------------
proc tixExFileSelectBox:config-showhidden {w value} {
    upvar #0 $w data

    set data(-showhidden) $value
    tixExFileSelectBox:SetShowHidden $w
}

# Update both DirList and {file list and dir combo}
#
proc tixExFileSelectBox:config-directory {w value} {
    upvar #0 $w data

    set data(-directory) [tixFSNormalize $value]
    tixSetSilent $data(w:dirlist) $data(-directory)
    tixSetSilent $data(w:dir) $data(-directory)
    tixWidgetDoWhenIdle tixExFileSelectBox:LoadFiles $w reload

    return $data(-directory)
}

proc tixExFileSelectBox:config-filetypes {w value} {
    upvar #0 $w data

    $data(w:types) subwidget listbox delete 0 end

    foreach name [array names data] {
	if {[string match type,* $name]} {
	    catch {unset data($name)}
	}
    }

    if {$value == ""} {
	$data(w:types) config -state disabled
    } else {
	$data(w:types) config -state normal

	foreach type $value {
	    $data(w:types) insert end [lindex $type 1]
	    set data(type,[lindex $type 1]) [lindex $type 0]
	}
	tixSetSilent $data(w:types) ""
    }
}

#----------------------------------------------------------------------
# MISC Methods
#----------------------------------------------------------------------
proc tixExFileSelectBox:SetShowHidden {w} {
    upvar #0 $w data

    $data(w:dirlist) config -showhidden $data(-showhidden)

    tixWidgetDoWhenIdle tixExFileSelectBox:LoadFiles $w reload
}

# User activates the dir combobox
#
#
proc tixExFileSelectBox:Cmd-DirCombo {w args} {
    upvar #0 $w data

    set dir [tixEvent flag V]
    set dir [tixFSExternal $dir]
    if {![file isdirectory $dir]} {
	return
    }
    set dir [tixFSNormalize $dir]

    $data(w:dirlist) config -value $dir
    set data(-directory) $dir
}

# User activates the dir list
#
#
proc tixExFileSelectBox:Cmd-DirList {w args} {
    upvar #0 $w data

    set dir $data(-directory)
    catch {set dir [tixEvent flag V]}
    set dir [tixFSNormalize [tixFSExternal $dir]]

    tixSetSilent $data(w:dir) $dir
    set data(-directory) $dir

    tixWidgetDoWhenIdle tixExFileSelectBox:LoadFiles $w noreload
}

# User activates the dir list
#
#
proc tixExFileSelectBox:Browse-DirList {w args} {
    upvar #0 $w data

    set dir [tixEvent flag V]
    set dir [tixFSNormalize [tixFSExternal $dir]]
    tixExFileSelectBox:Cmd-DirList $w $dir
}

proc tixExFileSelectBox:IsPattern {w string} {
    return [regexp "\[\[\\\{\\*\\?\]" $string]
}

proc tixExFileSelectBox:Cmd-FileCombo {w value} {
    upvar #0 $w data

    if {[tixEvent type] eq "<Return>"} {
	tixExFileSelectBox:Ok $w
    }
}

proc tixExFileSelectBox:Ok {w} {
    upvar #0 $w data

    set value [string trim [$data(w:file) subwidget entry get]]
    if {$value == ""} {
	set value $data(-pattern)
    }
    tixSetSilent $data(w:file) $value

    if {[tixExFileSelectBox:IsPattern $w $value]} {
	set data(-pattern) $value
	tixWidgetDoWhenIdle tixExFileSelectBox:LoadFiles $w reload
    } else {
	# ensure absolute path
	set value [file join $data(-directory) $value]; # native
	set data(-value) [tixFSNativeNorm $value]
	tixExFileSelectBox:Invoke $w
    }
}

proc tixExFileSelectBox:Cancel {w} {
    upvar #0 $w data

    if {$data(-dialog) != ""} {
	eval $data(-dialog) popdown
    }
}

proc tixExFileSelectBox:Invoke {w} {
    upvar #0 $w data

    # Save some old history
    #
    $data(w:dir)  addhistory [$data(w:dir) cget -value]
    $data(w:file) addhistory $data(-pattern)
    $data(w:file) addhistory $data(-value)
    if {$data(-dialog) != ""} {
	eval $data(-dialog) popdown
    }
    if {$data(-command) != "" && !$data(-disablecallback)} {
	set bind(specs) "%V"
	set bind(%V) $data(-value)
	tixEvalCmdBinding $w $data(-command) bind $data(-value)
    }
}

proc tixExFileSelectBox:Cmd-FileList {w invoke args} {
    upvar #0 $w data

    set index [lindex [$data(w:filelist) subwidget listbox curselection] 0]
    if {$index == ""} {
	set index 0
    }

    set file [$data(w:filelist) subwidget listbox get $index]
    tixSetSilent $data(w:file) $file

    set value [file join $data(-directory) $file]
    set data(-value) [tixFSNativeNorm $value]

    if {$invoke == 1} {
	tixExFileSelectBox:Invoke $w
    } elseif {$data(-browsecmd) != ""} {
	tixEvalCmdBinding $w $data(-browsecmd) "" $data(-value)
    }
}

proc tixExFileSelectBox:Cmd-TypeCombo {w args} {
    upvar #0 $w data

    set value [tixEvent flag V]

    if {[info exists data(type,$value)]} {
	set data(-pattern) $data(type,$value)
	tixSetSilent $data(w:file) $data(-pattern)
	tixWidgetDoWhenIdle tixExFileSelectBox:LoadFiles $w reload
    }
}

proc tixExFileSelectBox:LoadFiles {w flag} {
    upvar #0 $w data

    if {$flag ne "reload" && $data(-directory) eq $data(oldDir)} {
	return
    }

    if {![winfo ismapped [winfo toplevel $w]]} {
	tixDoWhenMapped [winfo toplevel $w] \
	    [list tixExFileSelectBox:LoadFiles $w $flag]
	return
    }

    set listbox [$data(w:filelist) subwidget listbox]
    $listbox delete 0 end

    set data(-value) ""

    tixBusy $w on [$data(w:dirlist) subwidget hlist]

    # wrap in a catch so you can't get stuck in a Busy state
    if {[catch {
	foreach name [tixFSListDir $data(-directory) 0 1 0 \
			  $data(-showhidden) $data(-pattern)] {
	    $listbox insert end $name
	}

	if {$data(oldDir) ne $data(-directory)} {
	    # Otherwise if the user has already selected a file and then
	    # presses "show hidden", the selection won't be wiped out.
	    tixSetSilent $data(w:file) $data(-pattern)
	}
    } err]} {
	tixDebug "tixExFileSelectBox:LoadFiles error for $w\n$err"
    }
    set data(oldDir) $data(-directory)

    tixWidgetDoWhenIdle tixBusy $w off [$data(w:dirlist) subwidget hlist]
}

#
# Called when thd listbox is first mapped
proc tixExFileSelectBox:Map {w} {
    if {![winfo exists $w]} {
	return
    }
    upvar #0 $w data

    set bind(specs) "%V"
    set bind(%V) $data(-value)
    tixEvalCmdBinding $w bind \
	[list tixExFileSelectBox:Cmd-DirList $w] $data(-directory)
}

#----------------------------------------------------------------------
# Public commands
#
#----------------------------------------------------------------------
proc tixExFileSelectBox:invoke {w} {
    tixExFileSelectBox:Invoke $w
}

proc tixExFileSelectBox:filter {w} {
    tixExFileSelectBox:LoadFiles $w reload
}


Filemanager

Name Type Size Permission Actions
bitmaps Folder 0755
html Folder 0755
pref Folder 0755
Balloon.tcl File 12.97 KB 0644
BtnBox.tcl File 2.61 KB 0644
CObjView.tcl File 7.56 KB 0644
ChkList.tcl File 4.97 KB 0644
ComboBox.tcl File 35.42 KB 0644
Compat.tcl File 870 B 0644
Console.tcl File 14.95 KB 0644
Control.tcl File 12.11 KB 0644
DefSchm.tcl File 2.94 KB 0644
DialogS.tcl File 4.2 KB 0644
DirBox.tcl File 5.3 KB 0644
DirDlg.tcl File 2.15 KB 0644
DirList.tcl File 6.9 KB 0644
DirTree.tcl File 8.76 KB 0644
DragDrop.tcl File 3.93 KB 0644
DtlList.tcl File 1002 B 0644
EFileBox.tcl File 11.12 KB 0644
EFileDlg.tcl File 1.68 KB 0644
Event.tcl File 5.11 KB 0644
FileBox.tcl File 14 KB 0644
FileCbx.tcl File 2.42 KB 0644
FileDlg.tcl File 2.13 KB 0644
FileEnt.tcl File 7.15 KB 0644
FloatEnt.tcl File 3.1 KB 0644
Grid.tcl File 21.16 KB 0644
HList.tcl File 17.72 KB 0644
HListDD.tcl File 4.39 KB 0644
IconView.tcl File 5.97 KB 0644
Init.tcl File 6.05 KB 0644
LabEntry.tcl File 2.09 KB 0644
LabFrame.tcl File 1.15 KB 0644
LabWidg.tcl File 3.86 KB 0644
ListNBk.tcl File 3.5 KB 0644
Meter.tcl File 3.04 KB 0644
MultView.tcl File 3.62 KB 0644
NoteBook.tcl File 6.02 KB 0644
OldUtil.tcl File 2.98 KB 0644
OptMenu.tcl File 9.17 KB 0644
PanedWin.tcl File 27.68 KB 0644
PopMenu.tcl File 5.37 KB 0644
Primitiv.tcl File 10.28 KB 0644
README.txt File 987 B 0644
ResizeH.tcl File 12.94 KB 0644
SGrid.tcl File 5.8 KB 0644
SHList.tcl File 3.7 KB 0644
SListBox.tcl File 6.97 KB 0644
STList.tcl File 2.37 KB 0644
SText.tcl File 3.09 KB 0644
SWidget.tcl File 9.52 KB 0644
SWindow.tcl File 6.75 KB 0644
Select.tcl File 7.04 KB 0644
Shell.tcl File 1.06 KB 0644
SimpDlg.tcl File 1.13 KB 0644
StackWin.tcl File 1.95 KB 0644
StatBar.tcl File 1.31 KB 0644
StdBBox.tcl File 1.62 KB 0644
StdShell.tcl File 1.15 KB 0644
TList.tcl File 17.59 KB 0644
Tix.tcl File 9.51 KB 0644
Tree.tcl File 4.57 KB 0644
Utils.tcl File 10.54 KB 0644
VResize.tcl File 4.95 KB 0644
VStack.tcl File 9.42 KB 0644
VTree.tcl File 4.31 KB 0644
Variable.tcl File 2.5 KB 0644
WInfo.tcl File 965 B 0644
fs.tcl File 3.9 KB 0644
libTix.so File 320.71 KB 0755
license.terms File 2.76 KB 0644
pkgIndex.tcl File 122 B 0644