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

📄 checkbox.itk

📁 windows下的GDB insight前端
💻 ITK
字号:
## Checkbox# ----------------------------------------------------------------------# Implements a checkbuttonbox.  Supports adding, inserting, deleting,# selecting, and deselecting of checkbuttons by tag and index.## ----------------------------------------------------------------------#  AUTHOR: John A. Tucker                EMAIL: jatucker@spd.dsccc.com## ----------------------------------------------------------------------#            Copyright (c) 1997 DSC Technologies Corporation# ======================================================================# Permission to use, copy, modify, distribute and license this software # and its documentation for any purpose, and without fee or written # agreement with DSC, is hereby granted, provided that the above copyright # notice appears in all copies and that both the copyright notice and # warranty disclaimer below appear in supporting documentation, and that # the names of DSC Technologies Corporation or DSC Communications # Corporation not be used in advertising or publicity pertaining to the # software without specific, written prior permission.# # DSC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING # ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, AND NON-# INFRINGEMENT. THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND THE# AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. IN NO EVENT SHALL # DSC BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR # ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTUOUS ACTION,# ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS # SOFTWARE.# ======================================================================## Use option database to override default resources of base classes.#option add *Checkbox.labelMargin	10	widgetDefaultoption add *Checkbox.labelFont     \      "-Adobe-Helvetica-Bold-R-Normal--*-120-*-*-*-*-*-*"  widgetDefaultoption add *Checkbox.labelPos		nw	widgetDefaultoption add *Checkbox.borderWidth	2	widgetDefaultoption add *Checkbox.relief		groove	widgetDefault## Usual options.#itk::usual Checkbox {    keep -background -borderwidth -cursor -foreground -labelfont}# ------------------------------------------------------------------#                            CHECKBOX# ------------------------------------------------------------------itcl::class iwidgets::Checkbox {    inherit iwidgets::Labeledframe    constructor {args} {}    itk_option define -orient orient Orient vertical    public {      method add {tag args}      method insert {index tag args}      method delete {index}      method get {{index ""}}      method index {index}      method select {index}      method deselect {index}      method flash {index}      method toggle {index}      method buttonconfigure {index args}  }  private {      method gettag {index}      ;# Get the tag of the checkbutton associated                                 ;# with a numeric index      variable _unique 0         ;# Unique id for choice creation.      variable _buttons {}       ;# List of checkbutton tags.      common buttonVar           ;# Array of checkbutton "-variables"  }}## Provide a lowercased access method for the Checkbox class.#proc ::iwidgets::checkbox {pathName args} {    uplevel ::iwidgets::Checkbox $pathName $args}# ------------------------------------------------------------------#                        CONSTRUCTOR# ------------------------------------------------------------------itcl::body iwidgets::Checkbox::constructor {args} {    eval itk_initialize $args}# ------------------------------------------------------------------#                            OPTIONS# ------------------------------------------------------------------# ------------------------------------------------------------------# OPTION: -orient## Allows the user to orient the checkbuttons either horizontally# or vertically.  Added by Chad Smith (csmith@adc.com) 3/10/00.# ------------------------------------------------------------------itcl::configbody iwidgets::Checkbox::orient {  if {$itk_option(-orient) == "horizontal"} {    foreach tag $_buttons {      pack $itk_component($tag) -side left -anchor nw -padx 4 -expand 1    }  } elseif {$itk_option(-orient) == "vertical"} {    foreach tag $_buttons {      pack $itk_component($tag) -side top -anchor w -padx 4 -expand 0    }  } else {    error "Bad orientation: $itk_option(-orient).  Should be\      \"horizontal\" or \"vertical\"."  }}# ------------------------------------------------------------------#                            METHODS# ------------------------------------------------------------------# ------------------------------------------------------------------# METHOD: index index## Searches the checkbutton tags in the checkbox for the one with the# requested tag, numerical index, or keyword "end".  Returns the # choices's numerical index if found, otherwise error.# ------------------------------------------------------------------itcl::body iwidgets::Checkbox::index {index} {    if {[llength $_buttons] > 0} {        if {[regexp {(^[0-9]+$)} $index]} {            if {$index < [llength $_buttons]} {                return $index            } else {                error "Checkbox index \"$index\" is out of range"            }        } elseif {$index == "end"} {            return [expr {[llength $_buttons] - 1}]        } else {            if {[set idx [lsearch $_buttons $index]] != -1} {                return $idx            }            error "bad Checkbox index \"$index\": must be number, end,\                    or pattern"        }    } else {        error "Checkbox \"$itk_component(hull)\" has no checkbuttons"    }}# ------------------------------------------------------------------# METHOD: add tag ?option value option value ...?## Add a new tagged checkbutton to the checkbox at the end.  The method # takes additional options which are passed on to the checkbutton# constructor.  These include most of the typical checkbutton # options.  The tag is returned.# ------------------------------------------------------------------itcl::body iwidgets::Checkbox::add {tag args} {    itk_component add $tag {        eval checkbutton $itk_component(childsite).cb[incr _unique] \            -variable [list [itcl::scope buttonVar($this,$tag)]] \            -anchor w \            -justify left \            -highlightthickness 0 \            $args    } {       usual      keep -command -disabledforeground -selectcolor -state      ignore -highlightthickness -highlightcolor      rename -font -labelfont labelFont Font    }    # Redraw the buttons with the proper orientation.    if {$itk_option(-orient) == "vertical"} {      pack $itk_component($tag) -side top -anchor w -padx 4 -expand 0    } else {      pack $itk_component($tag) -side left -anchor nw -expand 1    }    lappend _buttons $tag    return $tag}# ------------------------------------------------------------------# METHOD: insert index tag ?option value option value ...?## Insert the tagged checkbutton in the checkbox just before the # one given by index.  Any additional options are passed on to the# checkbutton constructor.  These include the typical checkbutton# options.  The tag is returned.# ------------------------------------------------------------------itcl::body iwidgets::Checkbox::insert {index tag args} {    itk_component add $tag {        eval checkbutton $itk_component(childsite).cb[incr _unique] \            -variable [list [itcl::scope buttonVar($this,$tag)]] \            -anchor w \            -justify left \            -highlightthickness 0 \            $args    }  {       usual      ignore -highlightthickness -highlightcolor      rename -font -labelfont labelFont Font    }    set index [index $index]    set before [lindex $_buttons $index]    set _buttons [linsert $_buttons $index $tag]    pack $itk_component($tag) -anchor w -padx 4 -before $itk_component($before)    return $tag}# ------------------------------------------------------------------# METHOD: delete index## Delete the specified checkbutton.# ------------------------------------------------------------------itcl::body iwidgets::Checkbox::delete {index} {    set tag [gettag $index]    set index [index $index]    destroy $itk_component($tag)    set _buttons [lreplace $_buttons $index $index]    if { [info exists buttonVar($this,$tag)] == 1 } {	unset buttonVar($this,$tag)    }}# ------------------------------------------------------------------# METHOD: select index## Select the specified checkbutton.# ------------------------------------------------------------------itcl::body iwidgets::Checkbox::select {index} {    set tag [gettag $index]    #-----------------------------------------------------------    # BUG FIX: csmith (Chad Smith: csmith@adc.com), 3/30/99    #-----------------------------------------------------------    # This method should only invoke the checkbutton if it's not    # already selected.  Check its associated variable, and if    # it's set, then just ignore and return.    #-----------------------------------------------------------    if {[set [itcl::scope buttonVar($this,$tag)]] == 	[[component $tag] cget -onvalue]} {      return    }    $itk_component($tag) invoke}# ------------------------------------------------------------------# METHOD: toggle index## Toggle a specified checkbutton between selected and unselected# ------------------------------------------------------------------itcl::body iwidgets::Checkbox::toggle {index} {    set tag [gettag $index]    $itk_component($tag) toggle}# ------------------------------------------------------------------# METHOD: get## Return the value of the checkbutton with the given index, or a# list of all checkbutton values in increasing order by index.# ------------------------------------------------------------------itcl::body iwidgets::Checkbox::get {{index ""}} {    set result {}    if {$index == ""} {	foreach tag $_buttons {	    if {$buttonVar($this,$tag)} {		lappend result $tag	    }	}    } else {        set tag [gettag $index]	set result $buttonVar($this,$tag)    }    return $result}# ------------------------------------------------------------------# METHOD: deselect index## Deselect the specified checkbutton.# ------------------------------------------------------------------itcl::body iwidgets::Checkbox::deselect {index} {    set tag [gettag $index]    $itk_component($tag) deselect}# ------------------------------------------------------------------# METHOD: flash index## Flash the specified checkbutton.# ------------------------------------------------------------------itcl::body iwidgets::Checkbox::flash {index} {    set tag [gettag $index]    $itk_component($tag) flash  }# ------------------------------------------------------------------# METHOD: buttonconfigure index ?option? ?value option value ...?## Configure a specified checkbutton.  This method allows configuration # of checkbuttons from the Checkbox level.  The options may have any # of the values accepted by the add method.# ------------------------------------------------------------------itcl::body iwidgets::Checkbox::buttonconfigure {index args} {     set tag [gettag $index]    eval $itk_component($tag) configure $args}# ------------------------------------------------------------------# METHOD: gettag index## Return the tag of the checkbutton associated with a specified# numeric index# ------------------------------------------------------------------itcl::body iwidgets::Checkbox::gettag {index} {    return [lindex $_buttons [index $index]]}

⌨️ 快捷键说明

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