📄 tree.tcl
字号:
namespace eval Tree { variable count variable dblclick variable search_pattern variable commands_list variable mcombo variable tree variable list variable cmd_list}#==========================================================proc Tree::create {nb} { global tree_lf tree_sw tree command list runcombo set frame [$nb insert end Tree -text "Hier Viewer"] set pw [PanedWindow $frame.pw -side top] set pane [$pw add -weight 1] set title [TitleFrame $pane.tree_lf -text "Modules tree"] set tree_sw [ScrolledWindow [$title getframe].tree_sw \ -relief sunken -borderwidth 2] set Tree::tree [Tree $tree_sw.tree \ -relief flat -borderwidth 0 -width 15 -highlightthickness 0\ -redraw 0 -dropenabled 1 -dragenabled 1 \ -dragevent 3 \ -droptypes { TREE_NODE {copy {} move {} link {}} LISTBOX_ITEM {copy {} move {} link {}} } \ -opencmd "Tree::moddir 1 $tree_sw.tree" \ -closecmd "Tree::moddir 0 $tree_sw.tree"] $tree_sw setwidget $Tree::tree set all_mods ""; set mod_name "" set Tree::mcombo [ComboBox $pane.mods -values $all_mods -textvariable mod_name \ -bd 1 -text "Select top design" -modifycmd { current $mod_name get_gui_hier $Tree::tree configure -redraw 1 }] pack $tree_sw -side top -expand yes -fill both pack $title -fill both -expand yes pack $Tree::mcombo -side bottom -fill both set pane [$pw add -weight 2] set pw1 [PanedWindow $pane.pw1 -side right] set pane1 [$pw1 add -weight 1] set tree_lf [TitleFrame $pane1.tree_lf -text "Content"] set tree_sw [ScrolledWindow [$tree_lf getframe].tree_sw \ -scrollbar both -auto vertical -relief sunken -borderwidth 1] set Tree::list [text $tree_sw.text -relief sunken -borderwidth 1 -wrap none] set pane2 [$pw1 add -weight 2 -minsize 0] set cmd_list_sw [ScrolledWindow $pane2.tree_sw \ -scrollbar both -auto both -relief sunken -borderwidth 1] set Tree::cmd_list [text $cmd_list_sw.text -relief sunken -borderwidth 1 -wrap none -height 1 -bg grey85] # Creating Run Frame #====================== lappend Tree::commands_list "" set runframe [frame $pane.run] set runcombo [ComboBox $runframe.cmd -textvariable cmd -bd 1] set runbutton [button $runframe.button -text "Run" -bd 1 -command { set cmd_run [$Tree::cmd_list get sel.first sel.last] set cmd_runl [ldelete [split $cmd_run \n] ""] foreach cmd_line $cmd_runl { $Tree::list insert end "[eval $cmd_line]\n" } }] set clrbutton [button $runframe.clrbutton -text "Clear" -bd 1 -command { $Tree::list delete 0.0 end }] set srchbutton [button $runframe.srchbutton -text "Find" -bd 1 -command { Tree::search_text $cmd }] pack $runbutton -side left -padx 1 pack $clrbutton -side right -padx 1 pack $srchbutton -side right -padx 1 pack $runcombo -side right -fill x -expand true $cmd_list_sw setwidget $Tree::cmd_list pack $Tree::cmd_list $cmd_list_sw -fill both -expand yes $tree_sw setwidget $Tree::list pack $tree_sw $tree_lf -fill both -expand yes pack $runframe -side bottom -fill x pack $pw1 -fill both -expand yes pack $pw -fill both -expand yes $runcombo bind <Return> { $Tree::list insert end "[eval $cmd]\n" lappend Tree::commands_list $cmd $runcombo configure -values $Tree::commands_list $runcombo setvalue first } $Tree::tree bindText <ButtonPress-1> "Tree::select tree 1 $Tree::tree" $Tree::tree bindText <Double-ButtonPress-1> "Tree::select tree 2 $Tree::tree"}#==========================================================proc Tree::getdir { tree node path } { variable count set lentries [glob -nocomplain [file join $path "*"]] set lfiles {} foreach f $lentries { set tail [file tail $f] if { [file isdirectory $f] } { $tree insert end $node n:$count \ -text $tail \ -image [Bitmap::get folder] \ -drawcross allways \ -data $f incr count } else { lappend lfiles $tail } } $tree itemconfigure $node -drawcross auto -data $lfiles}#==========================================================proc Tree::moddir { idx tree node } { if { $idx && [$tree itemcget $node -drawcross] == "allways" } { getdir $tree $node [$tree itemcget $node -data] if { [llength [$tree nodes $node]] } { $tree itemconfigure $node -image [Bitmap::get openfold] } else { $tree itemconfigure $node -image [Bitmap::get folder] } } else { $tree itemconfigure $node -image [Bitmap::get [lindex {folder openfold} $idx]] }}#==========================================================proc Tree::select { where num tree node} { global tree_lf module_name my_editor variable dblclick set dblclick 1 if { $num == 1 } { if { $where == "tree" && [lsearch [$tree selection get] $node] != -1 } { unset dblclick return } if { $where == "tree" } { $tree selection set $node update } } elseif {$num == 2} { $tree_lf configure -text [$tree itemcget $node -data] $Net::title configure -text [$tree itemcget $node -data] Net::delete_all $tree selection set $node update set mod_name [$tree itemcget $node -data] current $mod_name } }#==========================================================proc Tree::expand { tree but } { if { [set cur [$tree selection get]] != "" } { if { $but == 0 } { $tree opentree $cur } else { $tree closetree $cur } }}#=====================================================proc Tree::search_text {string} { global cur set w $Tree::list if {$cur != ""} { set cur [$w search -count length $string $cur end] } if {$cur == ""} { $w tag remove search 0.0 end set cur 1.0 } else { $w tag remove search 0.0 $cur $w tag add "search" $cur "$cur + $length char" set cur [$w index "$cur + $length char"] $w see $cur } $w tag configure "search" -foreground yellow}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -