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

📄 listbox.tcl

📁 Linux下的MSN聊天程序源码
💻 TCL
📖 第 1 页 / 共 4 页
字号:
#  Command ListBox::itemcget# ----------------------------------------------------------------------------proc ListBox::itemcget { path item option } {    return [Widget::cget $path.$item $option]}# ----------------------------------------------------------------------------#  Command ListBox::bindText# ----------------------------------------------------------------------------proc ListBox::bindText { path event script } {    if { $script != "" } {        set map [list %W $path]        set script [string map $map $script]        $path.c bind "click" $event "$script \[ListBox::_get_current $path]"    } else {        $path.c bind "click" $event {}    }}# ----------------------------------------------------------------------------#  Command ListBox::bindImage# ----------------------------------------------------------------------------proc ListBox::bindImage { path event script } {    if { $script != "" } {        set map [list %W $path]        set script [string map $map $script]        $path.c bind "img" $event "$script \[ListBox::_get_current $path]"    } else {        $path.c bind "img" $event {}    }}# ----------------------------------------------------------------------------#  Command ListBox::delete# ----------------------------------------------------------------------------proc ListBox::delete { path args } {    variable $path    upvar 0  $path data    foreach litems $args {        foreach item $litems {            set idx [lsearch -exact $data(items) $item]            if { $idx != -1 } {                set data(items) [lreplace $data(items) $idx $idx]                Widget::destroy $path.$item                if { [info exists data(upd,create,$item)] } {                    unset data(upd,create,$item)                } else {                    lappend data(upd,delete) $item                }            }        }    }    set sel $data(selitems)    set data(selitems) {}    eval [list selection $path set] $sel    _redraw_idle $path 2}# ----------------------------------------------------------------------------#  Command ListBox::move# ----------------------------------------------------------------------------proc ListBox::move { path item index } {    variable $path    upvar 0  $path data    if { [set idx [lsearch -exact $data(items) $item]] == -1 } {        return -code error "item \"$item\" does not exist"    }    set data(items) [linsert [lreplace $data(items) $idx $idx] $index $item]    _redraw_idle $path 2}# ----------------------------------------------------------------------------#  Command ListBox::reorder# ----------------------------------------------------------------------------proc ListBox::reorder { path neworder } {    variable $path    upvar 0  $path data    set data(items) [BWidget::lreorder $data(items) $neworder]    _redraw_idle $path 2}# ----------------------------------------------------------------------------#  Command ListBox::selection# ----------------------------------------------------------------------------proc ListBox::selection { path cmd args } {    variable $path    upvar 0  $path data    switch -- $cmd {        set {            set data(selitems) {}            foreach item $args {                if { [lsearch -exact $data(selitems) $item] == -1 } {                    if { [lsearch -exact $data(items) $item] != -1 } {                        lappend data(selitems) $item                    }                }            }        }        add {            foreach item $args {                if { [lsearch -exact $data(selitems) $item] == -1 } {                    if { [lsearch -exact $data(items) $item] != -1 } {                        lappend data(selitems) $item                    }                }            }        }        remove {            foreach item $args {                if { [set idx [lsearch -exact $data(selitems) $item]] != -1 } {                    set data(selitems) [lreplace $data(selitems) $idx $idx]                }            }        }        clear {            set data(selitems) {}        }        get {            return $data(selitems)        }        includes {            return [expr {[lsearch -exact $data(selitems) $args] != -1}]        }        default {            return        }    }    _redraw_idle $path 1}# ----------------------------------------------------------------------------#  Command ListBox::exists# ----------------------------------------------------------------------------proc ListBox::exists { path item } {    variable $path    upvar 0  $path data    return [expr {[lsearch -exact $data(items) $item] != -1}]}# ----------------------------------------------------------------------------#  Command ListBox::index# ----------------------------------------------------------------------------proc ListBox::index { path item } {    variable $path    upvar 0  $path data    if {[string equal $item "active"]} { return [$path selection get] }    return [lsearch -exact $data(items) $item]}# ----------------------------------------------------------------------------#  ListBox::find#     Returns the item given a position.#  findInfo     @x,y ?confine?#               lineNumber# ----------------------------------------------------------------------------proc ListBox::find {path findInfo {confine ""}} {    variable $path    upvar 0  $path widgetData    if {[regexp -- {^@([0-9]+),([0-9]+)$} $findInfo match x y]} {        set x [$path.c canvasx $x]        set y [$path.c canvasy $y]    } elseif {[regexp -- {^[0-9]+$} $findInfo lineNumber]} {        set dy [Widget::getoption $path -deltay]        set y  [expr {$dy*($lineNumber+0.5)}]        set confine ""    } else {        return -code error "invalid find spec \"$findInfo\""    }    set found 0    set xi    0    foreach xs $widgetData(xlist) {        if {$x <= $xs} {            foreach id [$path.c find overlapping $xi $y $xs $y] {                set ltags [$path.c gettags $id]                set item  [lindex $ltags 0]                if { [string equal $item "item"] ||                     [string equal $item "img"]  ||                     [string equal $item "win"] } {                    # item is the label or image/window of the node                    set item [string range [lindex $ltags 1] 2 end]                    set found 1                    break                }            }            break        }        set  xi  $xs    }    if {$found} {        if {[string equal $confine "confine"]} {            # test if x stand inside node bbox            set xi [expr {[lindex [$path.c coords n:$item] 0]-[Widget::getoption $path -padx]}]            set xs [lindex [$path.c bbox n:$item] 2]            if {$x >= $xi && $x <= $xs} {                return $item            }        } else {            return $item        }    }    return ""}# ----------------------------------------------------------------------------#  Command ListBox::item - deprecated# ----------------------------------------------------------------------------proc ListBox::item { path first {last ""} } {    variable $path    upvar 0  $path data    if { ![string length $last] } {        return [lindex $data(items) $first]    } else {        return [lrange $data(items) $first $last]    }}# ----------------------------------------------------------------------------#  Command ListBox::items# ----------------------------------------------------------------------------proc ListBox::items { path {first ""} {last ""}} {    variable $path    upvar 0  $path data    if { ![string length $first] } {	return $data(items)    }    if { ![string length $last] } {        return [lindex $data(items) $first]    } else {        return [lrange $data(items) $first $last]    }}# ----------------------------------------------------------------------------#  Command ListBox::see# ----------------------------------------------------------------------------proc ListBox::see { path item } {    variable $path    upvar 0  $path data    if { [Widget::getoption $path -redraw] && $data(upd,afterid) != "" } {        after cancel $data(upd,afterid)        _redraw_listbox $path    }    set idn [$path.c find withtag n:$item]    if { $idn != "" } {        ListBox::_see $path $idn right        ListBox::_see $path $idn left    }}# ----------------------------------------------------------------------------#  Command ListBox::edit# ----------------------------------------------------------------------------proc ListBox::edit { path item text {verifycmd ""} {clickres 0} {select 1}} {    variable _edit    variable $path    upvar 0  $path data    if { [Widget::getoption $path -redraw] && $data(upd,afterid) != "" } {        after cancel $data(upd,afterid)        _redraw_listbox $path    }    set idn [$path.c find withtag n:$item]    if { $idn != "" } {        ListBox::_see $path $idn right        ListBox::_see $path $idn left        set oldfg  [$path.c itemcget $idn -fill]        set sbg    [Widget::getoption $path -selectbackground]        set coords [$path.c coords $idn]        set x      [lindex $coords 0]        set y      [lindex $coords 1]        set bd     [expr {[$path.c cget -borderwidth]+[$path.c cget -highlightthickness]}]        set w      [expr {[winfo width $path] - 2*$bd}]        set wmax   [expr {[$path.c canvasx $w]-$x}]	$path.c itemconfigure $idn    -fill [Widget::getoption $path -background]        $path.c itemconfigure s:$item -fill {} -outline {}        set _edit(text) $text        set _edit(wait) 0        set frame  [frame $path.edit \                        -relief flat -borderwidth 0 -highlightthickness 0 \                        -background [Widget::getoption $path -background]]        set ent    [entry $frame.edit \                        -width              0     \                        -relief             solid \                        -borderwidth        1     \                        -highlightthickness 0     \                        -foreground         [_getoption $path $item -foreground] \                        -background         [Widget::getoption $path -background] \                        -selectforeground   [Widget::getoption $path -selectforeground] \                        -selectbackground   $sbg  \                        -font               [_getoption $path $item -font] \                        -textvariable       ListBox::_edit(text)]        pack $ent -ipadx 8 -anchor w        set idw [$path.c create window $x $y -window $frame -anchor w]        trace variable ListBox::_edit(text) w [list ListBox::_update_edit_size $path $ent $idw $wmax]        tkwait visibility $ent        grab  $frame        BWidget::focus set $ent        _update_edit_size $path $ent $idw $wmax        update        if { $select } {            $ent selection range 0 end            $ent icursor end            $ent xview end        }        bindtags $ent [list $ent Entry]        bind $ent <Escape> {set ListBox::_edit(wait) 0}        bind $ent <Return> {set ListBox::_edit(wait) 1}	if { $clickres == 0 || $clickres == 1 } {	    bind $frame <Button>  [list set ListBox::_edit(wait) $clickres]	}        set ok 0        while { !$ok } {            tkwait variable ListBox::_edit(wait)            if { !$_edit(wait) || $verifycmd == "" ||                 [uplevel \#0 $verifycmd [list $_edit(text)]] } {                set ok 1            }        }        trace vdelete ListBox::_edit(text) w [list ListBox::_update_edit_size $path $ent $idw $wmax]        grab release $frame        BWidget::focus release $ent        destroy $frame        $path.c delete $idw        $path.c itemconfigure $idn    -fill $oldfg        $path.c itemconfigure s:$item -fill $sbg -outline $sbg        if { $_edit(wait) } {            return $_edit(text)        }    }    return ""}# ----------------------------------------------------------------------------#  Command ListBox::xview# ----------------------------------------------------------------------------proc ListBox::xview { path args } {    return [eval [list $path.c xview] $args]}# ----------------------------------------------------------------------------#  Command ListBox::yview# ----------------------------------------------------------------------------proc ListBox::yview { path args } {    return [eval [list $path.c yview] $args]}proc ListBox::getcanvas { path } {    return $path.c}proc ListBox::curselection { path } {    return [$path selection get]}# ----------------------------------------------------------------------------#  Command ListBox::_update_edit_size# ----------------------------------------------------------------------------proc ListBox::_update_edit_size { path entry idw wmax args } {    set entw [winfo reqwidth $entry]    if { $entw >= $wmax } {        $path.c itemconfigure $idw -width $wmax    } else {

⌨️ 快捷键说明

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