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

📄 tree.tcl

📁 一个用TCL/TK写的用于verilog的集成编辑环境.
💻 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 + -