123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270 |
- # -*- mode: TCL; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
- #
- # $Id: FileEnt.tcl,v 1.7 2004/03/28 02:44:57 hobbs Exp $
- #
- # FileEnt.tcl --
- #
- # TixFileEntry Widget: an entry box for entering filenames.
- #
- # 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.
- #
- tixWidgetClass tixFileEntry {
- -classname TixFileEntry
- -superclass tixLabelWidget
- -method {
- invoke filedialog update
- }
- -flag {
- -activatecmd -command -dialogtype -disablecallback -disabledforeground
- -filebitmap -selectmode -state -validatecmd -value -variable
- }
- -forcecall {
- -variable
- }
- -static {
- -filebitmap
- }
- -configspec {
- {-activatecmd activateCmd ActivateCmd ""}
- {-command command Command ""}
- {-dialogtype dialogType DialogType ""}
- {-disablecallback disableCallback DisableCallback 0 tixVerifyBoolean}
- {-disabledforeground disabledForeground DisabledForeground #303030}
- {-filebitmap fileBitmap FileBitmap ""}
- {-selectmode selectMode SelectMode normal}
- {-state state State normal}
- {-validatecmd validateCmd ValidateCmd ""}
- {-value value Value ""}
- {-variable variable Variable ""}
- }
- -default {
- {*frame.borderWidth 2}
- {*frame.relief sunken}
- {*Button.highlightThickness 0}
- {*Entry.highlightThickness 0}
- {*Entry.borderWidth 0}
- }
- }
- proc tixFileEntry:InitWidgetRec {w} {
- upvar #0 $w data
- tixChainMethod $w InitWidgetRec
- set data(varInited) 0
- if {$data(-filebitmap) eq ""} {
- set data(-filebitmap) [tix getbitmap openfile]
- }
- }
- proc tixFileEntry:ConstructFramedWidget {w frame} {
- upvar #0 $w data
- tixChainMethod $w ConstructFramedWidget $frame
- set data(w:entry) [entry $frame.entry]
- set data(w:button) [button $frame.button -bitmap $data(-filebitmap) \
- -takefocus 0]
- set data(entryfg) [$data(w:entry) cget -fg]
- pack $data(w:button) -side right -fill both
- pack $data(w:entry) -side left -expand yes -fill both
- }
- proc tixFileEntry:SetBindings {w} {
- upvar #0 $w data
- tixChainMethod $w SetBindings
- $data(w:button) config -command [list tixFileEntry:OpenFile $w]
- tixSetMegaWidget $data(w:entry) $w
- # If user press <return>, verify the value and call the -command
- #
- bind $data(w:entry) <Return> [list tixFileEntry:invoke $w]
- bind $data(w:entry) <KeyPress> {
- if {[set [tixGetMegaWidget %W](-selectmode)] eq "immediate"} {
- tixFileEntry:invoke [tixGetMegaWidget %W]
- }
- }
- bind $data(w:entry) <FocusOut> {
- if {"%d" eq "NotifyNonlinear" || "%d" eq "NotifyNonlinearVirtual"} {
- tixFileEntry:invoke [tixGetMegaWidget %W]
- }
- }
- bind $w <FocusIn> [list focus $data(w:entry)]
- }
- #----------------------------------------------------------------------
- # CONFIG OPTIONS
- #----------------------------------------------------------------------
- proc tixFileEntry:config-state {w value} {
- upvar #0 $w data
- if {$value eq "normal"} {
- $data(w:button) config -state $value
- $data(w:entry) config -state $value -fg $data(entryfg)
- catch {$data(w:label) config -fg $data(entryfg)}
- } else {
- $data(w:button) config -state $value
- $data(w:entry) config -state $value -fg $data(-disabledforeground)
- catch {$data(w:label) config -fg $data(-disabledforeground)}
- }
- return ""
- }
- proc tixFileEntry:config-value {w value} {
- tixFileEntry:SetValue $w $value
- }
- proc tixFileEntry:config-variable {w arg} {
- upvar #0 $w data
- if {[tixVariable:ConfigVariable $w $arg]} {
- # The value of data(-value) is changed if tixVariable:ConfigVariable
- # returns true
- tixFileEntry:SetValue $w $data(-value)
- }
- catch {
- unset data(varInited)
- }
- set data(-variable) $arg
- }
- #----------------------------------------------------------------------
- # User Commands
- #----------------------------------------------------------------------
- proc tixFileEntry:invoke {w} {
- upvar #0 $w data
- if {![catch {$data(w:entry) index sel.first}]} {
- # THIS ENTRY OWNS SELECTION --> TURN IT OFF
- #
- $data(w:entry) select from end
- $data(w:entry) select to end
- }
- tixFileEntry:SetValue $w [$data(w:entry) get]
- }
- proc tixFileEntry:filedialog {w args} {
- upvar #0 $w data
- if {[llength $args]} {
- return [eval [tix filedialog $data(-dialogtype)] $args]
- } else {
- return [tix filedialog $data(-dialogtype)]
- }
- }
- proc tixFileEntry:update {w} {
- upvar #0 $w data
- if {[$data(w:entry) get] ne $data(-value)} {
- tixFileEntry:invoke $w
- }
- }
- #----------------------------------------------------------------------
- # Internal Commands
- #----------------------------------------------------------------------
- proc tixFileEntry:OpenFile {w} {
- upvar #0 $w data
- if {$data(-activatecmd) != ""} {
- uplevel #0 $data(-activatecmd)
- }
- switch -- $data(-dialogtype) tk_chooseDirectory {
- set args [list -parent [winfo toplevel $w]]
- if {[set initial $data(-value)] != ""} {
- lappend args -initialdir $data(value)
- }
- set retval [eval [linsert $args 0 tk_chooseDirectory]]
- if {$retval != ""} {tixFileEntry:SetValue $w [tixFSNative $retval]}
- } tk_getOpenFile - tk_getSaveFile {
- set args [list -parent [winfo toplevel $w]]
- if {[set initial [$data(w:entry) get]] != ""} {
- switch -glob -- $initial *.py {
- set types [list {"Python Files" {.py .pyw}} {"All Files" *}]
- } *.txt {
- set types [list {"Text Files" .txt} {"All Files" *}]
- } *.tcl {
- set types [list {"Tcl Files" .tcl} {"All Files" *}]
- } * - default {
- set types [list {"All Files" *}]
- }
- if {[file isfile $initial]} {
- lappend args -initialdir [file dir $initial] \
- -initialfile $initial
- } elseif {[file isdir $initial]} {
- lappend args -initialdir $initial
- }
- } else {
- set types [list {"All Files" *}]
- }
- lappend args -filetypes $types
- set retval [eval $data(-dialogtype) $args]
- if {$retval != ""} {tixFileEntry:SetValue $w [tixFSNative $retval]}
- } default {
- set filedlg [tix filedialog $data(-dialogtype)]
- $filedlg config -parent [winfo toplevel $w] \
- -command [list tixFileEntry:FileDlgCallback $w]
- focus $data(w:entry)
- $filedlg popup
- }
- }
- proc tixFileEntry:FileDlgCallback {w args} {
- set filename [tixEvent flag V]
- tixFileEntry:SetValue $w $filename
- }
- proc tixFileEntry:SetValue {w value} {
- upvar #0 $w data
- if {[llength $data(-validatecmd)]} {
- set value [tixEvalCmdBinding $w $data(-validatecmd) "" $value]
- }
- if {$data(-state) eq "normal"} {
- $data(w:entry) delete 0 end
- $data(w:entry) insert 0 $value
- $data(w:entry) xview end
- }
- set data(-value) $value
- tixVariable:UpdateVariable $w
- if {[llength $data(-command)] && !$data(-disablecallback)} {
- if {![info exists data(varInited)]} {
- set bind(specs) ""
- tixEvalCmdBinding $w $data(-command) bind $value
- }
- }
- }
- proc tixFileEntry:Destructor {w} {
- upvar #0 $w data
- tixUnsetMegaWidget $data(w:entry)
- tixVariable:DeleteVariable $w
- # Chain this to the superclass
- #
- tixChainMethod $w Destructor
- }
|