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

📄 scrollw.tcl

📁 一个用TCL/TK写的用于verilog的集成编辑环境.
💻 TCL
字号:
# ------------------------------------------------------------------------------#  scrollw.tcl#  This file is part of Unifix BWidget Toolkit#  $Id: scrollw.tcl,v 1.5 1999/05/25 08:28:21 eric Exp $# ------------------------------------------------------------------------------#  Index of commands:#     - ScrolledWindow::create#     - ScrolledWindow::getframe#     - ScrolledWindow::setwidget#     - ScrolledWindow::configure#     - ScrolledWindow::cget#     - ScrolledWindow::_set_hscroll#     - ScrolledWindow::_set_vscroll#     - ScrolledWindow::_realize# ------------------------------------------------------------------------------namespace eval ScrolledWindow {    Widget::declare ScrolledWindow {        {-background  TkResource ""   0 button}        {-scrollbar   Enum       both 1 {none both vertical horizontal}}        {-auto        Enum       both 0 {none both vertical horizontal}}        {-relief      TkResource flat 0 frame}        {-borderwidth TkResource 0    0 frame}        {-bg          Synonym    -background}        {-bd          Synonym    -borderwidth}    }    Widget::addmap ScrolledWindow "" ._grid.f {-relief {} -borderwidth {}}    proc ::ScrolledWindow { path args } { return [eval ScrolledWindow::create $path $args] }    proc use {} {}    variable _widget}# ------------------------------------------------------------------------------#  Command ScrolledWindow::create# ------------------------------------------------------------------------------proc ScrolledWindow::create { path args } {    variable _widget    Widget::init ScrolledWindow $path $args    set bg     [Widget::cget $path -background]    set sw     [frame $path -relief flat -bd 0 -bg $bg -highlightthickness 0 -takefocus 0]    set grid   [frame $path._grid -relief flat -bd 0 -bg $bg -highlightthickness 0 -takefocus 0]    set sb    [lsearch {none horizontal vertical both} [Widget::cget $path -scrollbar]]    set auto  [lsearch {none horizontal vertical both} [Widget::cget $path -auto]]    set rspan [expr {1 + !($sb & 1)}]    set cspan [expr {1 + !($sb & 2)}]    set _widget($path,realized) 0    set _widget($path,sb)       $sb    set _widget($path,auto)     $auto    set _widget($path,hpack)    [expr {$rspan == 1}]    set _widget($path,vpack)    [expr {$cspan == 1}]    # scrollbar horizontale ou les deux    if { $sb & 1 } {        scrollbar $grid.hscroll \            -highlightthickness 0 -takefocus 0 \            -orient  horiz	\            -relief  sunken	\            -bg      $bg        $grid.hscroll set 0 1        grid $grid.hscroll -column 0 -row 1 -sticky we -columnspan $cspan -pady 1    }    # scrollbar verticale ou les deux    if { $sb & 2 } {        scrollbar $grid.vscroll \            -highlightthickness 0 -takefocus 0 \            -orient  vert  	\            -relief  sunken 	\            -bg      $bg        $grid.vscroll set 0 1        grid $grid.vscroll -column 1 -row 0 -sticky ns -rowspan $rspan -padx 1    }    eval frame $grid.f -bg $bg -highlightthickness 0 [Widget::subcget $path ._grid.f]    grid $grid.f -column 0 -row 0 -sticky nwse -columnspan $cspan -rowspan $rspan    grid columnconfigure $grid 0 -weight 1    grid rowconfigure    $grid 0 -weight 1    pack $grid -fill both -expand yes    bind $grid <Configure> "ScrolledWindow::_realize $path"    bind $grid <Destroy>   "ScrolledWindow::_destroy $path"    rename $path ::$path:cmd    proc ::$path { cmd args } "return \[eval ScrolledWindow::\$cmd $path \$args\]"    return $path}# ------------------------------------------------------------------------------#  Command ScrolledWindow::getframe# ------------------------------------------------------------------------------proc ScrolledWindow::getframe { path } {    return $path}# ------------------------------------------------------------------------------#  Command ScrolledWindow::setwidget# ------------------------------------------------------------------------------proc ScrolledWindow::setwidget { path widget } {    variable _widget    set grid   $path._grid    set sb     $_widget($path,sb)    set option {}    pack $widget -in $grid.f -fill both -expand yes    # scrollbar horizontale ou les deux    if { $sb & 1 } {        $grid.hscroll configure -command "$widget xview"        lappend option  "-xscrollcommand" "ScrolledWindow::_set_hscroll $path"    }    # scrollbar verticale ou les deux    if { $sb & 2 } {        $grid.vscroll configure -command "$widget yview"        lappend option  "-yscrollcommand" "ScrolledWindow::_set_vscroll $path"    }    if { [llength $option] } {        eval $widget configure $option    }}# ------------------------------------------------------------------------------#  Command ScrolledWindow::configure# ------------------------------------------------------------------------------proc ScrolledWindow::configure { path args } {    variable _widget    set grid $path._grid    set res [Widget::configure $path $args]    if { [Widget::hasChanged $path -background bg] } {        $path configure -background $bg        $grid configure -background $bg        $grid.f configure -background $bg        catch {$grid.hscroll configure -background $bg}        catch {$grid.vscroll configure -background $bg}    }    if { [Widget::hasChanged $path -auto auto] } {        set _widget($path,auto) [lsearch {none horizontal vertical both} $auto]        if { $_widget($path,sb) & 1 } {            eval _set_hscroll $path [$grid.hscroll get]        }        if { $_widget($path,sb) & 2 } {            eval _set_vscroll $path [$grid.vscroll get]        }    }    return $res}# ------------------------------------------------------------------------------#  Command ScrolledWindow::cget# ------------------------------------------------------------------------------proc ScrolledWindow::cget { path option } {    return [Widget::cget $path $option]}# ------------------------------------------------------------------------------#  Command ScrolledWindow::_destroy# ------------------------------------------------------------------------------proc ScrolledWindow::_destroy { path } {    variable _widget    unset _widget($path,sb)    unset _widget($path,auto)    unset _widget($path,hpack)    unset _widget($path,vpack)    Widget::destroy $path    rename $path {}}# ------------------------------------------------------------------------------#  Command ScrolledWindow::_set_hscroll# ------------------------------------------------------------------------------proc ScrolledWindow::_set_hscroll { path vmin vmax } {    variable _widget    if { $_widget($path,realized) } {        set grid $path._grid        if { $_widget($path,auto) & 1 } {            if { $_widget($path,hpack) && $vmin == 0 && $vmax == 1 } {                grid configure $grid.f -rowspan 2                if { $_widget($path,sb) & 2 } {                    grid configure $grid.vscroll -rowspan 2                }                set _widget($path,hpack) 0            } elseif { !$_widget($path,hpack) && ($vmin != 0 || $vmax != 1) } {                grid configure $grid.f -rowspan 1                if { $_widget($path,sb) & 2 } {                    grid configure $grid.vscroll -rowspan 1                }                set _widget($path,hpack) 1            }        }        $grid.hscroll set $vmin $vmax    }}# ------------------------------------------------------------------------------#  Command ScrolledWindow::_set_vscroll# ------------------------------------------------------------------------------proc ScrolledWindow::_set_vscroll { path vmin vmax } {    variable _widget    if { $_widget($path,realized) } {        set grid $path._grid        if { $_widget($path,auto) & 2 } {            if { $_widget($path,vpack) && $vmin == 0 && $vmax == 1 } {                grid configure $grid.f -columnspan 2                if { $_widget($path,sb) & 1 } {                    grid configure $grid.hscroll -columnspan 2                }                set _widget($path,vpack) 0            } elseif { !$_widget($path,vpack) && ($vmin != 0 || $vmax != 1) } {                grid configure $grid.f -columnspan 1                if { $_widget($path,sb) & 1 } {                    grid configure $grid.hscroll -columnspan 1                }                set _widget($path,vpack) 1            }        }        $grid.vscroll set $vmin $vmax    }}# ------------------------------------------------------------------------------#  Command ScrolledWindow::_realize# ------------------------------------------------------------------------------proc ScrolledWindow::_realize { path } {    variable _widget    set grid $path._grid    bind  $grid <Configure> {}    set _widget($path,realized) 1    place $grid -anchor nw -x 0 -y 0 -relwidth 1.0 -relheight 1.0}

⌨️ 快捷键说明

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