📄 hierarchy
字号:
# ----------------------------------------------------------------------# DEMO: hierarchy in [incr Widgets]# ----------------------------------------------------------------------package require Iwidgets 4.0# This demo displays a users file system starting at thier HOME# directory. You can change the starting directory by setting the# environment variable SHOWDIR.#if {![info exists env(SHOWDIR)]} { set env(SHOWDIR) $env(HOME)}# ----------------------------------------------------------------------# PROC: get_files file## Used as the -querycommand for the hierarchy viewer. Returns the# list of files under a particular directory. If the file is "",# then the SHOWDIR is used as the directory. Otherwise, the node itself# is treated as a directory. The procedure returns a unique id and# the text to be displayed for each file. The unique id is the complete# path name and the text is the file name.# ----------------------------------------------------------------------proc get_files {file} { global env if {$file == ""} { set dir $env(SHOWDIR) } else { set dir $file } if {[catch {cd $dir}] != 0} { return "" } set rlist "" foreach file [lsort [glob -nocomplain *]] { lappend rlist [list [file join $dir $file] $file] } return $rlist}# ----------------------------------------------------------------------# PROC: select_node tags status## Select/Deselect the node given the tags and current selection status.# The unique id which is the complete file path name is mixed in with # all the tags for the node. So, we'll find it by searching for our # SHOWDIR and then doing the selection or deselection.# ----------------------------------------------------------------------proc select_node {tags status} { global env set uid [lindex $tags [lsearch -regexp $tags $env(SHOWDIR)]] if {$status} { .h selection remove $uid } else { .h selection add $uid }}# ----------------------------------------------------------------------# PROC: expand_node tags## Expand the node given the tags. The unique id which is the complete # file path name is mixed in with all the tags for the node. So, we'll # find it by searching for our SHOWDIR and then doing the expansion.# ----------------------------------------------------------------------proc expand_node {tags} { global env set uid [lindex $tags [lsearch -regexp $tags $env(SHOWDIR)]] .h expand $uid}# ----------------------------------------------------------------------# PROC: collapse_node tags## Collapse the node given the tags. The unique id which is the complete # file path name is mixed in with all the tags for the node. So, we'll # find it by searching for our SHOWDIR and then doing the collapse.# ----------------------------------------------------------------------proc collapse_node {tags} { global env set uid [lindex $tags [lsearch -regexp $tags $env(SHOWDIR)]] .h collapse $uid}# ----------------------------------------------------------------------# PROC: expand_recursive## Recursively expand all the file nodes in the hierarchy. # ----------------------------------------------------------------------proc expand_recursive {node} { set files [get_files $node] foreach tagset $files { set uid [lindex $tagset 0] .h expand $uid if {[get_files $uid] != {}} { expand_recursive $uid } }}# ----------------------------------------------------------------------# PROC: expand_all## Expand all the file nodes in the hierarchy. # ----------------------------------------------------------------------proc expand_all {} { expand_recursive ""}# ----------------------------------------------------------------------# PROC: collapse_all## Collapse all the nodes in the hierarchy.# ----------------------------------------------------------------------proc collapse_all {} { .h configure -querycommand "get_files %n"}# # Create the hierarchy mega-widget, adding commands to both the item# and background popup menus.#iwidgets::hierarchy .h -querycommand "get_files %n" -visibleitems 30x15 \ -labeltext $env(SHOWDIR) -selectcommand "select_node %n %s"pack .h -side left -expand yes -fill both.h component itemMenu add command -label "Select" \ -command {select_node [.h current] 0}.h component itemMenu add command -label "Deselect" \ -command {select_node [.h current] 1}.h component itemMenu add separator.h component itemMenu add command -label "Expand" \ -command {expand_node [.h current]}.h component itemMenu add command -label "Collapse" \ -command {collapse_node [.h current]}.h component bgMenu add command -label "Expand All" -command expand_all.h component bgMenu add command -label "Collapse All" -command collapse_all.h component bgMenu add command -label "Clear Selections" \ -command {.h selection clear}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -