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

📄 notebook.tcl

📁 Linux下的MSN聊天程序源码
💻 TCL
📖 第 1 页 / 共 3 页
字号:
        }        if { $idx != $data(base) } {            set data(base) $idx            _redraw $path        }    }}# ---------------------------------------------------------------------------#  Command NoteBook::page# ---------------------------------------------------------------------------proc NoteBook::page { path first {last ""} } {    variable $path    upvar 0  $path data    if { $last == "" } {        return [lindex $data(pages) $first]    } else {        return [lrange $data(pages) $first $last]    }}# ---------------------------------------------------------------------------#  Command NoteBook::pages# ---------------------------------------------------------------------------proc NoteBook::pages { path {first ""} {last ""}} {    variable $path    upvar 0  $path data    if { ![string length $first] } {	return $data(pages)    }    if { ![string length $last] } {        return [lindex $data(pages) $first]    } else {        return [lrange $data(pages) $first $last]    }}# ---------------------------------------------------------------------------#  Command NoteBook::index# ---------------------------------------------------------------------------proc NoteBook::index { path page } {    variable $path    upvar 0  $path data    return [lsearch -exact $data(pages) $page]}# ---------------------------------------------------------------------------#  Command NoteBook::_destroy# ---------------------------------------------------------------------------proc NoteBook::_destroy { path } {    variable $path    upvar 0  $path data    foreach page $data(pages) {        Widget::destroy $path.f$page    }    Widget::destroy $path    unset data}# ---------------------------------------------------------------------------#  Command NoteBook::getframe# ---------------------------------------------------------------------------proc NoteBook::getframe { path page } {    return $path.f$page}# ---------------------------------------------------------------------------#  Command NoteBook::_test_page# ---------------------------------------------------------------------------proc NoteBook::_test_page { path page } {    variable $path    upvar 0  $path data    if { [set pos [lsearch -exact $data(pages) $page]] == -1 } {        return -code error "page \"$page\" does not exists"    }    return $pos}proc NoteBook::_getoption { path page option } {    set value [Widget::cget $path.f$page $option]    if {![string length $value]} {        set value [Widget::cget $path $option]    }    return $value}# ---------------------------------------------------------------------------#  Command NoteBook::_itemconfigure# ---------------------------------------------------------------------------proc NoteBook::_itemconfigure { path page lres } {    variable $path    upvar 0  $path data    set res [Widget::configure $path.f$page $lres]    if { [Widget::hasChanged $path.f$page -text foo] } {        _compute_width $path    } elseif  { [Widget::hasChanged $path.f$page -image foo] } {        _compute_height $path        _compute_width  $path    }    if { [Widget::hasChanged $path.f$page -state state] &&         $state == "disabled" && $data(select) == $page } {        set data(select) ""    }    return $res}# ---------------------------------------------------------------------------#  Command NoteBook::_compute_width# ---------------------------------------------------------------------------proc NoteBook::_compute_width { path } {    variable $path    upvar 0  $path data    set wmax 0    set wtot 0    set hmax $data(hpage)    set font [Widget::cget $path -font]    if { ![info exists data(textid)] } {        set data(textid) [$path.c create text 0 -100 -font $font -anchor nw]    }    set id $data(textid)    $path.c itemconfigure $id -font $font    foreach page $data(pages) {        $path.c itemconfigure $id -text [Widget::cget $path.f$page -text]	# Get the bbox for this text to determine its width, then substract	# 6 from the width to account for canvas bbox oddness w.r.t. widths of	# simple text.	foreach {x1 y1 x2 y2} [$path.c bbox $id] break	set x2 [expr {$x2 - 6}]        set wtext [expr {$x2 - $x1 + 20}]        if { [set img [Widget::cget $path.f$page -image]] != "" } {            set wtext [expr {$wtext + [image width $img] + 4}]            set himg  [expr {[image height $img] + 6}]            if { $himg > $hmax } {                set hmax $himg            }        }        set  wmax  [expr {$wtext > $wmax ? $wtext : $wmax}]        incr wtot  $wtext        set  data($page,width) $wtext    }    if { [Widget::cget $path -homogeneous] } {        foreach page $data(pages) {            set data($page,width) $wmax        }        set wtot [expr {$wmax * [llength $data(pages)]}]    }    set data(hpage) $hmax    set data(wpage) $wtot}# ---------------------------------------------------------------------------#  Command NoteBook::_compute_height# ---------------------------------------------------------------------------proc NoteBook::_compute_height { path } {    variable $path    upvar 0  $path data    set font    [Widget::cget $path -font]    set pady0   [Widget::_get_padding $path -tabpady 0]    set pady1   [Widget::_get_padding $path -tabpady 1]    set metrics [font metrics $font -linespace]    set imgh    0    set lines   1    foreach page $data(pages) {        set img  [Widget::cget $path.f$page -image]        set text [Widget::cget $path.f$page -text]        set len [llength [split $text \n]]        if {$len > $lines} { set lines $len}        if {$img != ""} {            set h [image height $img]            if {$h > $imgh} { set imgh $h }        }    }    set height [expr {$metrics * $lines}]    if {$imgh > $height} { set height $imgh }    set data(hpage) [expr {$height + $pady0 + $pady1}]}# ---------------------------------------------------------------------------#  Command NoteBook::_get_x_page# ---------------------------------------------------------------------------proc NoteBook::_get_x_page { path pos } {    variable _warrow    variable $path    upvar 0  $path data    set base $data(base)    # notebook tabs start flush with the left side of the notebook    set x 0    if { $pos < $base } {        foreach page [lrange $data(pages) $pos [expr {$base-1}]] {            incr x [expr {-$data($page,width)}]        }    } elseif { $pos > $base } {        foreach page [lrange $data(pages) $base [expr {$pos-1}]] {            incr x $data($page,width)        }    }    return $x}# ---------------------------------------------------------------------------#  Command NoteBook::_xview# ---------------------------------------------------------------------------proc NoteBook::_xview { path inc } {    variable $path    upvar 0  $path data    if { $inc == -1 } {        set base [expr {$data(base)-1}]        set dx $data([lindex $data(pages) $base],width)    } else {        set dx [expr {-$data([lindex $data(pages) $data(base)],width)}]        set base [expr {$data(base)+1}]    }    if { $base >= 0 && $base < [llength $data(pages)] } {        set data(base) $base        $path.c move page $dx 0        _draw_area   $path        _draw_arrows $path    }}# ---------------------------------------------------------------------------#  Command NoteBook::_highlight# ---------------------------------------------------------------------------proc NoteBook::_highlight { type path page } {    variable $path    upvar 0  $path data    if { [string equal [Widget::cget $path.f$page -state] "disabled"] } {        return    }    switch -- $type {        on {            $path.c itemconfigure "$page:poly" \		    -fill [_getoption $path $page -activebackground]            $path.c itemconfigure "$page:text" \		    -fill [_getoption $path $page -activeforeground]        }        off {            $path.c itemconfigure "$page:poly" \		    -fill [_getoption $path $page -background]            $path.c itemconfigure "$page:text" \		    -fill [_getoption $path $page -foreground]        }    }}# ---------------------------------------------------------------------------#  Command NoteBook::_select# ---------------------------------------------------------------------------proc NoteBook::_select { path page } {    variable $path    upvar 0  $path data    if {![string equal [Widget::cget $path.f$page -state] "normal"]} { return }    set oldsel $data(select)    if {[string equal $page $oldsel]} { return }    if { ![string equal $oldsel ""] } {	set cmd [Widget::cget $path.f$oldsel -leavecmd]	if { ![string equal $cmd ""] } {	    set code [catch {uplevel \#0 $cmd} res]	    if { $code == 1 || $res == 0 } {		return -code $code $res	    }	}	set data(select) ""	_draw_page $path $oldsel 0    }    set data(select) $page    if { ![string equal $page ""] } {	if { !$data($page,realized) } {	    set data($page,realized) 1	    set cmd [Widget::cget $path.f$page -createcmd]	    if { ![string equal $cmd ""] } {		uplevel \#0 $cmd	    }	}	set cmd [Widget::cget $path.f$page -raisecmd]	if { ![string equal $cmd ""] } {	    uplevel \#0 $cmd	}	_draw_page $path $page 0    }    _draw_area $path    }# -----------------------------------------------------------------------------#  Command NoteBook::_redraw# -----------------------------------------------------------------------------proc NoteBook::_redraw { path } {    variable $path    upvar 0  $path data    if { !$data(realized) } { return }    _compute_height $path    foreach page $data(pages) {        _draw_page $path $page 0    }    _draw_area   $path    _draw_arrows $path    }# ----------------------------------------------------------------------------#  Command NoteBook::_draw_page# ----------------------------------------------------------------------------proc NoteBook::_draw_page { path page create } {    variable $path    upvar 0  $path data        focus $path    # --- calcul des coordonnees et des couleurs de l'onglet ------------------    set pos [lsearch -exact $data(pages) $page]    set bg  [_getoption $path $page -background]    # lookup the tab colors    set fgt   $data(lbg)    set fgb   $data(dbg)    set h   $data(hpage)    set xd  [_get_x_page $path $pos]    set xf  [expr {$xd + $data($page,width)}]    # Set the initial text offsets -- a few pixels down, centered left-to-right    set textOffsetY [expr [Widget::_get_padding $path -tabpady 0] + 3]    set textOffsetX 9    # Coordinates of the tab corners are:    #     c3        c4    #    # c2                c5    #    # c1                c6    #    # where    # c1 = $xd,	  $h    # c2 = $xd+$xBevel,	           $arcRadius+2    # c3 = $xd+$xBevel+$arcRadius, $arcRadius    # c4 = $xf+1-$xBevel,          $arcRadius    # c5 = $xf+$arcRadius-$xBevel, $arcRadius+2    # c6 = $xf+$arcRadius,         $h    set top		2    set arcRadius	[Widget::cget $path -arcradius]    set xBevel		[Widget::cget $path -tabbevelsize]    if { $data(select) != $page } {	if { $pos == 0 } {	    # The leftmost page is a special case -- it is drawn with its	    # tab a little indented.  To achieve this, we incr xd.  We also	    # decr textOffsetX, so that the text doesn't move left/right.	    incr xd 2	    incr textOffsetX -2	}    } else {

⌨️ 快捷键说明

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