| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| |
|
| | |
| | |
| | |
| | |
| |
|
| | 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 |
| | } |
| |
|
| |
|
| | |
| | |
| | |
| | proc tixExFileSelectBox:ConstructWidget {w} { |
| | upvar #0 $w data |
| |
|
| | tixChainMethod $w ConstructWidget |
| |
|
| | |
| | set lf [frame $w.lf] |
| |
|
| | |
| | |
| | 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 |
| |
|
| | |
| | |
| | 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 |
| |
|
| | |
| | |
| | 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 |
| |
|
| | |
| | |
| | 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 |
| |
|
| | |
| | |
| | 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 |
| | } |
| | } |
| |
|
| |
|
| | |
| | |
| | |
| | proc tixExFileSelectBox:config-showhidden {w value} { |
| | upvar #0 $w data |
| |
|
| | set data(-showhidden) $value |
| | tixExFileSelectBox:SetShowHidden $w |
| | } |
| |
|
| | |
| | |
| | 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) "" |
| | } |
| | } |
| |
|
| | |
| | |
| | |
| | proc tixExFileSelectBox:SetShowHidden {w} { |
| | upvar #0 $w data |
| |
|
| | $data(w:dirlist) config -showhidden $data(-showhidden) |
| |
|
| | tixWidgetDoWhenIdle tixExFileSelectBox:LoadFiles $w reload |
| | } |
| |
|
| | |
| | |
| | |
| | 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 |
| | } |
| |
|
| | |
| | |
| | |
| | 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 |
| | } |
| |
|
| | |
| | |
| | |
| | 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 { |
| | |
| | set value [file join $data(-directory) $value] |
| | 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 |
| |
|
| | |
| | |
| | $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] |
| |
|
| | |
| | if {[catch { |
| | foreach name [tixFSListDir $data(-directory) 0 1 0 \ |
| | $data(-showhidden) $data(-pattern)] { |
| | $listbox insert end $name |
| | } |
| |
|
| | if {$data(oldDir) ne $data(-directory)} { |
| | |
| | |
| | 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] |
| | } |
| |
|
| | |
| | |
| | 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) |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | proc tixExFileSelectBox:invoke {w} { |
| | tixExFileSelectBox:Invoke $w |
| | } |
| |
|
| | proc tixExFileSelectBox:filter {w} { |
| | tixExFileSelectBox:LoadFiles $w reload |
| | } |
| |
|
| |
|