⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tkfbox.tcl

📁 genesis 2000 v9.1软件下载
💻 TCL
📖 第 1 页 / 共 3 页
字号:
	# should have been checked before tkFDialog_Update is called, so	# we normally won't come to here. Anyways, give an error and abort	# action.	tk_messageBox -type ok -message \	    "Cannot change to the directory \"$data(selectPath)\".\nPermission denied."\	    -icon warning	cd $appPWD	return    }    # Turn on the busy cursor. BUG?? We haven't disabled X events, though,    # so the user may still click and cause havoc ...    #    set entCursor [$data(ent) cget -cursor]    set dlgCursor [$w         cget -cursor]    $data(ent) config -cursor watch    $w         config -cursor watch    update idletasks        tkIconList_DeleteAll $data(icons)    # Make the dir list    #    foreach f [lsort -dictionary [glob -nocomplain .* *]] {	if ![string compare $f .] {	    continue	}	if ![string compare $f ..] {	    continue	}	if [file isdir ./$f] {	    if ![info exists hasDoneDir($f)] {		tkIconList_Add $data(icons) $folder $f		set hasDoneDir($f) 1	    }	}    }    # Make the file list    #    if ![string compare $data(filter) *] {	set files [lsort -dictionary \	    [glob -nocomplain .* *]]    } else {	set files [lsort -dictionary \	    [eval glob -nocomplain $data(filter)]]    }    set top 0    foreach f $files {	if ![file isdir ./$f] {	    if ![info exists hasDoneFile($f)] {		tkIconList_Add $data(icons) $file $f		set hasDoneFile($f) 1	    }	}    }    tkIconList_Arrange $data(icons)    # Update the Directory: option menu    #    set list ""    set dir ""    foreach subdir [file split $data(selectPath)] {	set dir [file join $dir $subdir]	lappend list $dir    }    $data(dirMenu) delete 0 end    set var [format %s(selectPath) $w]    foreach path $list {	$data(dirMenu) add command -label $path -command [list set $var $path]    }    # Restore the PWD to the application's PWD    #    cd $appPWD    # turn off the busy cursor.    #    $data(ent) config -cursor $entCursor    $w         config -cursor $dlgCursor}# tkFDialog_SetPathSilently --## 	Sets data(selectPath) without invoking the trace procedure#proc tkFDialog_SetPathSilently {w path} {    upvar #0 $w data    trace vdelete  data(selectPath) w "tkFDialog_SetPath $w"    set data(selectPath) $path    trace variable data(selectPath) w "tkFDialog_SetPath $w"}# This proc gets called whenever data(selectPath) is set#proc tkFDialog_SetPath {w name1 name2 op} {    upvar #0 $w data    tkFDialog_UpdateWhenIdle $w}# This proc gets called whenever data(filter) is set#proc tkFDialog_SetFilter {w type} {    upvar #0 $w data    upvar \#0 $data(icons) icons    set data(filter) [lindex $type 1]    $data(typeMenuBtn) config -text [lindex $type 0] -indicatoron 1    $icons(sbar) set 0.0 0.0        tkFDialog_UpdateWhenIdle $w}# tkFDialogResolveFile --##	Interpret the user's text input in a file selection dialog.#	Performs:##	(1) ~ substitution#	(2) resolve all instances of . and ..#	(3) check for non-existent files/directories#	(4) check for chdir permissions## Arguments:#	context:  the current directory you are in#	text:	  the text entered by the user#	defaultext: the default extension to add to files with no extension## Return vaue:#	[list $flag $directory $file]##	 flag = OK	: valid input#	      = PATTERN	: valid directory/pattern#	      = PATH	: the directory does not exist#	      = FILE	: the directory exists by the file doesn't#			  exist#	      = CHDIR	: Cannot change to the directory#	      = ERROR	: Invalid entry##	 directory      : valid only if flag = OK or PATTERN or FILE#	 file           : valid only if flag = OK or PATTERN##	directory may not be the same as context, because text may contain#	a subdirectory name#proc tkFDialogResolveFile {context text defaultext} {    set appPWD [pwd]    set path [tkFDialog_JoinFile $context $text]    if {[file ext $path] == ""} {	set path "$path$defaultext"    }    if [catch {file exists $path}] {	return [list ERROR $path ""]    }    if [catch {if [file exists $path] {}}] {	# This "if" block can be safely removed if the following code returns	# an error. It currently (7/22/97) doesn't	#	#	file exists ~nonsuchuser	#	return [list ERROR $path ""]    }    if [file exists $path] {	if [file isdirectory $path] {	    if [catch {		cd $path	    }] {		return [list CHDIR $path ""]	    }	    set directory [pwd]	    set file ""	    set flag OK	    cd $appPWD	} else {	    if [catch {		cd [file dirname $path]	    }] {		return [list CHDIR [file dirname $path] ""]	    }	    set directory [pwd]	    set file [file tail $path]	    set flag OK	    cd $appPWD	}    } else {	set dirname [file dirname $path]	if [file exists $dirname] {	    if [catch {		cd $dirname	    }] {		return [list CHDIR $dirname ""]	    }	    set directory [pwd]	    set file [file tail $path]	    if [regexp {[*]|[?]} $file] {		set flag PATTERN	    } else {		set flag FILE	    }	    cd $appPWD	} else {	    set directory $dirname	    set file [file tail $path]	    set flag PATH	}    }    return [list $flag $directory $file]}# Gets called when the entry box gets keyboard focus. We clear the selection# from the icon list . This way the user can be certain that the input in the # entry box is the selection.#proc tkFDialog_EntFocusIn {w} {    upvar #0 $w data    if [string compare [$data(ent) get] ""] {	$data(ent) selection from 0	$data(ent) selection to   end	$data(ent) icursor end    } else {	$data(ent) selection clear    }    tkIconList_Unselect $data(icons)    if ![string compare $data(type) open] {	$data(okBtn) config -text "Open"    } else {	$data(okBtn) config -text "Save"    }}proc tkFDialog_EntFocusOut {w} {    upvar #0 $w data    $data(ent) selection clear}# Gets called when user presses Return in the "File name" entry.#proc tkFDialog_ActivateEnt {w} {    upvar #0 $w data    set text [string trim [$data(ent) get]]    set list [tkFDialogResolveFile $data(selectPath) $text \		  $data(-defaultextension)]    set flag [lindex $list 0]    set path [lindex $list 1]    set file [lindex $list 2]    case $flag {	OK {	    if ![string compare $file ""] {		# user has entered an existing (sub)directory		set data(selectPath) $path		$data(ent) delete 0 end	    } else {		tkFDialog_SetPathSilently $w $path		set data(selectFile) $file		tkFDialog_Done $w	    }	}	PATTERN {	    set data(selectPath) $path	    set data(filter) $file	}	FILE {	    if ![string compare $data(type) open] {		tk_messageBox -icon warning -type ok \		    -message "File \"[file join $path $file]\" does not exist."		$data(ent) select from 0		$data(ent) select to   end		$data(ent) icursor end	    } else {		tkFDialog_SetPathSilently $w $path		set data(selectFile) $file		tkFDialog_Done $w	    }	}	PATH {	    tk_messageBox -icon warning -type ok \		-message "Directory \"$path\" does not exist."	    $data(ent) select from 0	    $data(ent) select to   end	    $data(ent) icursor end	}	CHDIR {	    tk_messageBox -type ok -message \	       "Cannot change to the directory \"$path\".\nPermission denied."\		-icon warning	    $data(ent) select from 0	    $data(ent) select to   end	    $data(ent) icursor end	}	ERROR {	    tk_messageBox -type ok -message \	       "Invalid file name \"$path\"."\		-icon warning	    $data(ent) select from 0	    $data(ent) select to   end	    $data(ent) icursor end	}    }}# Gets called when user presses the Alt-s or Alt-o keys.#proc tkFDialog_InvokeBtn {w key} {    upvar #0 $w data    if ![string compare [$data(okBtn) cget -text] $key] {	tkButtonInvoke $data(okBtn)    }}# Gets called when user presses the "parent directory" button#proc tkFDialog_UpDirCmd {w} {    upvar #0 $w data    global tcl_platform        if { [string compare $data(selectPath) "/"] == 0 } {	if {$tcl_platform(platform) == "windows"} {	    tkFDialog_ask_for_drive $w	}       return     }    if { [string match ?:/  $data(selectPath)] == 1 } {       tkFDialog_ask_for_drive $w       return    }        set data(selectPath) [file dirname $data(selectPath)]}proc tkFDialog_ask_for_drive {w} {   set TITLE "Drive Message"   set MESSAGE "To change drive, enter drive\              \nin 'File name' field (e.g. 'd:')"   tk_messageBox -message $MESSAGE -parent $w -type ok -title $TITLE}# Join a file name to a path name. The "file join" command will break# if the filename begins with ~#proc tkFDialog_JoinFile {path file} {    if {[string match {~*} $file] && [file exists $path/$file]} {	return [file join $path ./$file]    } else {	return [file join $path $file]    }}# Gets called when user presses the "OK" button#proc tkFDialog_OkCmd {w} {    upvar #0 $w data    set text [tkIconList_Get $data(icons)]    if [string compare $text ""] {	set file [tkFDialog_JoinFile $data(selectPath) $text]	if [file isdirectory $file] {	    tkFDialog_ListInvoke $w $text	    return	}    }    tkFDialog_ActivateEnt $w}# Gets called when user presses the "Cancel" button#proc tkFDialog_CancelCmd {w} {    upvar #0 $w data    global tkPriv    set tkPriv(selectFilePath) ""}# Gets called when user browses the IconList widget (dragging mouse, arrow# keys, etc)#proc tkFDialog_ListBrowse {w text} {    upvar #0 $w data    if {$text == ""} {	return    }    set file [tkFDialog_JoinFile $data(selectPath) $text]    if ![file isdirectory $file] {	$data(ent) delete 0 end	$data(ent) insert 0 $text	if ![string compare $data(type) open] {	    $data(okBtn) config -text "Open"	} else {	    $data(okBtn) config -text "Save"	}    } else {	$data(okBtn) config -text "Open"    }}# Gets called when user invokes the IconList widget (double-click, # Return key, etc)#proc tkFDialog_ListInvoke {w text} {    upvar #0 $w data    if {$text == ""} {	return    }    set file [tkFDialog_JoinFile $data(selectPath) $text]    if [file isdirectory $file] {	set appPWD [pwd]	if [catch {cd $file}] {	    tk_messageBox -type ok -message \	       "Cannot change to the directory \"$file\".\nPermission denied."\		-icon warning	} else {	    cd $appPWD	    set data(selectPath) $file	}    } else {	set data(selectFile) $file	tkFDialog_Done $w    }}# tkFDialog_Done --##	Gets called when user has input a valid filename.  Pops up a#	dialog box to confirm selection when necessary. Sets the#	tkPriv(selectFilePath) variable, which will break the "tkwait"#	loop in tkFDialog and return the selected filename to the#	script that calls tk_getOpenFile or tk_getSaveFile#proc tkFDialog_Done {w {selectFilePath ""}} {    upvar #0 $w data    global tkPriv    if ![string compare $selectFilePath ""] {	set selectFilePath [tkFDialog_JoinFile $data(selectPath) \		$data(selectFile)]	set tkPriv(selectFile)     $data(selectFile)	set tkPriv(selectPath)     $data(selectPath)	if {[file exists $selectFilePath] && 	    ![string compare $data(type) save]} {	    set reply [tk_messageBox -icon warning -type yesno \	        -message "File \"$selectFilePath\" already exists.\nDo you want to overwrite it?"]	    if ![string compare $reply "no"] {		return	    }	}    }    set tkPriv(selectFilePath) $selectFilePath}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -