曾与蒿藜同雨露,한때 잡초와 쑥과 함께 비와 이슬을 나누던 곳이 이제는 소나무와 삼나무와 함께 서리와 눈을 견뎌내고 있다.终随松柏到冰霜.かつては雑草やヨモギと共に雨や露を分かち合っていたが、今では松やヒノキと共に霜や雪に耐えている。曾与蒿藜同雨露,Once sharing rain and dew with weeds and wormwood, now enduring frost and snow with pines and cypresses.终随松柏到冰霜.曾与蒿藜同雨露한때 잡초와 쑥과 함께 비와 이슬을 나누던 곳이 이제는 소나무와 삼나무와 함께 서리와 눈을 견뎌내고 있다.,终随松柏到冰霜.譖セ荳手珍阯懷酔髮ィ髴イ�檎サ磯囂譚セ譟丞芦蜀ー髴�曾与蒿藜同雨露,鏇句笌钂胯棞鍚岄洦闇诧紝缁堥殢鏉炬煆鍒板啺闇�终随松柏到冰霜.曾与蒿藜同雨露,한때 잡초와 쑥과 함께 비와 이슬을 나누던 곳이 이제는 소나무와 삼나무와 함께 서리와 눈을 견뎌내고 있다.终随松柏到冰霜.曾与蒿藜同雨露,终随松柏到冰霜.
# -*- 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
}