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

📄 labeledwidget.itk

📁 windows下的GDB insight前端
💻 ITK
字号:
## Labeledwidget# ----------------------------------------------------------------------# Implements a labeled widget which contains a label and child site.# The child site is a frame which can filled with any widget via a # derived class or though the use of the childsite method.  This class# was designed to be a general purpose base class for supporting the # combination of label widget and a childsite, where a label may be # text, bitmap or image.  The options include the ability to position # the label around the childsite widget, modify the font and margin, # and control the display of the label.  ## ----------------------------------------------------------------------#  AUTHOR: Mark L. Ulferts             EMAIL: mulferts@austin.dsccc.com##  @(#) $Id: labeledwidget.itk,v 1.4 2001/08/20 20:02:53 smithc Exp $# ----------------------------------------------------------------------#            Copyright (c) 1995 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.# ======================================================================## Usual options.#itk::usual Labeledwidget {    keep -background -cursor -foreground -labelfont}# ------------------------------------------------------------------#                            LABELEDWIDGET# ------------------------------------------------------------------itcl::class iwidgets::Labeledwidget {    inherit itk::Widget    constructor {args} {}    destructor {}    itk_option define -disabledforeground disabledForeground \	DisabledForeground \#a3a3a3    itk_option define -labelpos labelPos Position w    itk_option define -labelmargin labelMargin Margin 2    itk_option define -labeltext labelText Text {}    itk_option define -labelvariable labelVariable Variable {}    itk_option define -labelbitmap labelBitmap Bitmap {}    itk_option define -labelimage labelImage Image {}    itk_option define -state state State normal    itk_option define -sticky sticky Sticky nsew    public method childsite        private method _positionLabel {{when later}}    proc alignlabels {args} {}    protected variable _reposition ""  ;# non-null => _positionLabel pending}    ## Provide a lowercased access method for the Labeledwidget class.# proc ::iwidgets::labeledwidget {pathName args} {    uplevel ::iwidgets::Labeledwidget $pathName $args}# ------------------------------------------------------------------#                        CONSTRUCTOR# ------------------------------------------------------------------itcl::body iwidgets::Labeledwidget::constructor {args} {    #    # Create a frame for the childsite widget.    #    itk_component add -protected lwchildsite {	frame $itk_interior.lwchildsite    }         #    # Create label.    #    itk_component add label {	label $itk_interior.label    } {	usual		rename -font -labelfont labelFont Font	ignore -highlightcolor -highlightthickness    }        #    # Set the interior to be the childsite for derived classes.    #    set itk_interior $itk_component(lwchildsite)    #    # Initialize the widget based on the command line options.    #    eval itk_initialize $args    #     # When idle, position the label.    #    _positionLabel}# ------------------------------------------------------------------#                           DESTRUCTOR# ------------------------------------------------------------------itcl::body iwidgets::Labeledwidget::destructor {} {    if {$_reposition != ""} {after cancel $_reposition}}# ------------------------------------------------------------------#                             OPTIONS# ------------------------------------------------------------------# ------------------------------------------------------------------# OPTION: -disabledforeground## Specified the foreground to be used on the label when disabled.# ------------------------------------------------------------------itcl::configbody iwidgets::Labeledwidget::disabledforeground {}# ------------------------------------------------------------------# OPTION: -labelpos## Set the position of the label on the labeled widget.  The margin# between the label and childsite comes along for the ride.# ------------------------------------------------------------------itcl::configbody iwidgets::Labeledwidget::labelpos {    _positionLabel}# ------------------------------------------------------------------# OPTION: -labelmargin## Specifies the distance between the widget and label.# ------------------------------------------------------------------itcl::configbody iwidgets::Labeledwidget::labelmargin {    _positionLabel}# ------------------------------------------------------------------# OPTION: -labeltext## Specifies the label text.# ------------------------------------------------------------------itcl::configbody iwidgets::Labeledwidget::labeltext {    $itk_component(label) configure -text $itk_option(-labeltext)        _positionLabel}# ------------------------------------------------------------------# OPTION: -labelvariable## Specifies the label text variable.# ------------------------------------------------------------------itcl::configbody iwidgets::Labeledwidget::labelvariable {    $itk_component(label) configure -textvariable $itk_option(-labelvariable)        _positionLabel}# ------------------------------------------------------------------# OPTION: -labelbitmap## Specifies the label bitmap.# ------------------------------------------------------------------itcl::configbody iwidgets::Labeledwidget::labelbitmap {    $itk_component(label) configure -bitmap $itk_option(-labelbitmap)        _positionLabel}# ------------------------------------------------------------------# OPTION: -labelimage## Specifies the label image.# ------------------------------------------------------------------itcl::configbody iwidgets::Labeledwidget::labelimage {    $itk_component(label) configure -image $itk_option(-labelimage)        _positionLabel}# ------------------------------------------------------------------# OPTION: -sticky## Specifies the stickyness of the child site. This option was added# by James Bonfield (committed by Chad Smith 8/20/01).# ------------------------------------------------------------------itcl::configbody iwidgets::Labeledwidget::sticky {    grid $itk_component(lwchildsite) -sticky $itk_option(-sticky)}# ------------------------------------------------------------------# OPTION: -state## Specifies the state of the label.  # ------------------------------------------------------------------itcl::configbody iwidgets::Labeledwidget::state {    _positionLabel}# ------------------------------------------------------------------#                            METHODS# ------------------------------------------------------------------# ------------------------------------------------------------------# METHOD: childsite## Returns the path name of the child site widget.# ------------------------------------------------------------------itcl::body iwidgets::Labeledwidget::childsite {} {    return $itk_component(lwchildsite)}# ------------------------------------------------------------------# PROCEDURE: alignlabels widget ?widget ...?## The alignlabels procedure takes a list of widgets derived from# the Labeledwidget class and adjusts the label margin to align # the labels.# ------------------------------------------------------------------itcl::body iwidgets::Labeledwidget::alignlabels {args} {    update    set maxLabelWidth 0        #    # Verify that all the widgets are of type Labeledwidget and     # determine the size of the maximum length label string.    #    foreach iwid $args {	set objcmd [itcl::find objects -isa Labeledwidget *::$iwid]	if {$objcmd == ""} {	    error "$iwid is not a \"Labeledwidget\""	}		set csWidth [winfo reqwidth $iwid.lwchildsite]	set shellWidth [winfo reqwidth $iwid]	    	if {($shellWidth - $csWidth) > $maxLabelWidth} {	    set maxLabelWidth [expr {$shellWidth - $csWidth}]	}    }        #    # Adjust the margins for the labels such that the child sites and    # labels line up.    #    foreach iwid $args {	set csWidth [winfo reqwidth $iwid.lwchildsite]	set shellWidth [winfo reqwidth $iwid]		set labelSize [expr {$shellWidth - $csWidth}]		if {$maxLabelWidth > $labelSize} {	    set objcmd [itcl::find objects -isa Labeledwidget *::$iwid]	    set dist [expr {$maxLabelWidth - \		    ($labelSize - [$objcmd cget -labelmargin])}]	    	    $objcmd configure -labelmargin $dist 	}    }	}# ------------------------------------------------------------------# PROTECTED METHOD: _positionLabel ?when?## Packs the label and label margin.  If "when" is "now", the# change is applied immediately.  If it is "later" or it is not# specified, then the change is applied later, when the application# is idle.# ------------------------------------------------------------------itcl::body iwidgets::Labeledwidget::_positionLabel {{when later}} {    if {$when == "later"} {	if {$_reposition == ""} {	    set _reposition [after idle [itcl::code $this _positionLabel now]]	}	return    } elseif {$when != "now"} {	error "bad option \"$when\": should be now or later"    }    #    # If we have a label, be it text, bitmap, or image continue.    #    if {($itk_option(-labeltext) != {}) || \	($itk_option(-labelbitmap) != {}) || \	($itk_option(-labelimage) != {}) || \	($itk_option(-labelvariable) != {})} {	#	# Set the foreground color based on the state.	#	if {[info exists itk_option(-state)]} {	    switch -- $itk_option(-state) {		disabled {		    $itk_component(label) configure \			-foreground $itk_option(-disabledforeground)		}		normal {		    $itk_component(label) configure \			-foreground $itk_option(-foreground)		}	    }	}	set parent [winfo parent $itk_component(lwchildsite)]	#	# Switch on the label position option.  Using the grid,	# adjust the row/column setting of the label, margin, and	# and childsite.  The margin height/width is adjust based        # on the orientation as well.  Finally, set the weights such        # that the childsite takes the heat on expansion and shrinkage.	#	switch $itk_option(-labelpos) {	    nw -	    n -	    ne {		grid $itk_component(label) -row 0 -column 0 \			-sticky $itk_option(-labelpos)		grid $itk_component(lwchildsite) -row 2 -column 0 \			-sticky $itk_option(-sticky)				grid rowconfigure $parent 0 -weight 0 -minsize 0		grid rowconfigure $parent 1 -weight 0 -minsize \			[winfo pixels $itk_component(label) \			 $itk_option(-labelmargin)]		grid rowconfigure $parent 2 -weight 1 -minsize 0		grid columnconfigure $parent 0 -weight 1 -minsize 0		grid columnconfigure $parent 1 -weight 0 -minsize 0		grid columnconfigure $parent 2 -weight 0 -minsize 0	    }	    en -	    e -	    es {		grid $itk_component(lwchildsite) -row 0 -column 0 \			-sticky $itk_option(-sticky)		grid $itk_component(label) -row 0 -column 2 \			-sticky $itk_option(-labelpos)				grid rowconfigure $parent 0 -weight 1 -minsize 0		grid rowconfigure $parent 1 -weight 0 -minsize 0		grid rowconfigure $parent 2 -weight 0 -minsize 0		grid columnconfigure $parent 0 -weight 1 -minsize 0		grid columnconfigure $parent 1 -weight 0 -minsize \			[winfo pixels $itk_component(label) \			$itk_option(-labelmargin)]		grid columnconfigure $parent 2 -weight 0 -minsize 0	    }	    	    se -	    s -	    sw {		grid $itk_component(lwchildsite) -row 0 -column 0 \			-sticky $itk_option(-sticky)		grid $itk_component(label) -row 2 -column 0 \			-sticky $itk_option(-labelpos)				grid rowconfigure $parent 0 -weight 1 -minsize 0		grid rowconfigure $parent 1 -weight 0 -minsize \			[winfo pixels $itk_component(label) \			$itk_option(-labelmargin)]		grid rowconfigure $parent 2 -weight 0 -minsize 0		grid columnconfigure $parent 0 -weight 1 -minsize 0		grid columnconfigure $parent 1 -weight 0 -minsize 0		grid columnconfigure $parent 2 -weight 0 -minsize 0	    }	    	    wn -	    w -	    ws {		grid $itk_component(lwchildsite) -row 0 -column 2 \			-sticky $itk_option(-sticky)		grid $itk_component(label) -row 0 -column 0 \			-sticky $itk_option(-labelpos)				grid rowconfigure $parent 0 -weight 1 -minsize 0		grid rowconfigure $parent 1 -weight 0 -minsize 0		grid rowconfigure $parent 2 -weight 0 -minsize 0		grid columnconfigure $parent 0 -weight 0 -minsize 0		grid columnconfigure $parent 1 -weight 0 -minsize \			[winfo pixels $itk_component(label) \			$itk_option(-labelmargin)]		grid columnconfigure $parent 2 -weight 1 -minsize 0	    }	    default {		error "bad labelpos option\			\"$itk_option(-labelpos)\": should be\			nw, n, ne, sw, s, se, en, e, es, wn, w, or ws"	    }	}    #    # Else, neither the  label text, bitmap, or image have a value, so    # forget them so they don't appear and manage only the childsite.    #    } else {	grid forget $itk_component(label)	grid $itk_component(lwchildsite) -row 0 -column 0 -sticky $itk_option(-sticky)	set parent [winfo parent $itk_component(lwchildsite)]	grid rowconfigure $parent 0 -weight 1 -minsize 0	grid rowconfigure $parent 1 -weight 0 -minsize 0	grid rowconfigure $parent 2 -weight 0 -minsize 0	grid columnconfigure $parent 0 -weight 1 -minsize 0	grid columnconfigure $parent 1 -weight 0 -minsize 0	grid columnconfigure $parent 2 -weight 0 -minsize 0    }    #    # Reset the resposition flag.    #    set _reposition ""}

⌨️ 快捷键说明

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